@greatapps/common 1.1.697 → 1.1.699

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 (557) 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/project-users.service.mjs +2 -2
  227. package/dist/modules/projects/services/project-users.service.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.map +1 -1
  241. package/dist/modules/subscriptions/hooks/use-cancelled-subscription-guard.mjs.map +1 -1
  242. package/dist/modules/subscriptions/types/calculate-subscription.type.mjs.map +1 -1
  243. package/dist/modules/subscriptions/types/pix-pending.type.mjs.map +1 -1
  244. package/dist/modules/subscriptions/utils/build-plan-extras.mjs.map +1 -1
  245. package/dist/modules/subscriptions/utils/get-subscription-cancellation-state.mjs.map +1 -1
  246. package/dist/modules/subscriptions/utils/get-subscription-expiry-date.mjs.map +1 -1
  247. package/dist/modules/subscriptions/utils/has-subscription-expired.mjs.map +1 -1
  248. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  249. package/dist/modules/subscriptions/utils/resolve-plan-extras-prices.mjs.map +1 -1
  250. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  251. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  252. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  253. package/dist/modules/users/handlers/list-messages.handler.mjs.map +1 -1
  254. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  255. package/dist/modules/users/services/messages.service.mjs.map +1 -1
  256. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  257. package/dist/modules/whitelabel/actions/revalidate-whitelabel.action.mjs.map +1 -1
  258. package/dist/modules/whitelabel/utils/normalize-hostname.mjs.map +1 -1
  259. package/dist/providers/auth.provider.mjs.map +1 -1
  260. package/dist/providers/navigation.provider.mjs.map +1 -1
  261. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  262. package/dist/route.mjs.map +1 -1
  263. package/dist/store/useAccountModals.mjs.map +1 -1
  264. package/dist/store/useBuyCreditsModal.mjs.map +1 -1
  265. package/dist/store/useCreditsDisabledModal.mjs.map +1 -1
  266. package/dist/store/useDesktopSidebarStore.mjs.map +1 -1
  267. package/dist/store/useMdSidebarStore.mjs.map +1 -1
  268. package/dist/store/usePaidPlanRequiredModal.mjs.map +1 -1
  269. package/dist/utils/constants/br-states.mjs.map +1 -1
  270. package/dist/utils/countries.mjs.map +1 -1
  271. package/dist/utils/format/currency.mjs.map +1 -1
  272. package/dist/utils/intl/cookie-domain.mjs.map +1 -1
  273. package/dist/utils/intl/locale-cookie.mjs.map +1 -1
  274. package/dist/utils/next-navigation.mjs.map +1 -1
  275. package/dist/utils/redirect.mjs.map +1 -1
  276. package/dist/utils/safeMutationAction.mjs.map +1 -1
  277. package/dist/utils/safeServerAction.mjs.map +1 -1
  278. package/dist/utils/withAction.mjs.map +1 -1
  279. package/package.json +115 -115
  280. package/src/components/account/ConfigurationsMyAccountModal.tsx +179 -179
  281. package/src/components/account/ConfirmDeleteAccountModal.tsx +110 -110
  282. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +68 -68
  283. package/src/components/account/DeleteAccountModal.tsx +160 -160
  284. package/src/components/account/DisableTwoFactorAuthModal.tsx +92 -92
  285. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +51 -51
  286. package/src/components/account/TwoFactorAuthModal.tsx +220 -220
  287. package/src/components/account/hooks/useChangePhoneForm.tsx +113 -113
  288. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +116 -116
  289. package/src/components/account/sections/ChangeEmailModal.tsx +239 -239
  290. package/src/components/account/sections/ChangePasswordSection.tsx +68 -68
  291. package/src/components/account/sections/ChangePhoneModal.tsx +273 -273
  292. package/src/components/account/sections/MyProfileSection.tsx +276 -276
  293. package/src/components/account/sections/PreferencesSection.tsx +278 -278
  294. package/src/components/account/sections/SecuritySection.tsx +102 -102
  295. package/src/components/account/sections/TokenSection.tsx +85 -85
  296. package/src/components/embeds/ClarityEmbed.tsx +70 -70
  297. package/src/components/embeds/CrispEmbed.tsx +195 -195
  298. package/src/components/embeds/EmbedWidgets.tsx +62 -62
  299. package/src/components/embeds/FrillEmbed.tsx +146 -146
  300. package/src/components/layouts/AppMobileNavBar.tsx +214 -214
  301. package/src/components/layouts/AppNavBar.tsx +40 -40
  302. package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
  303. package/src/components/layouts/NavBar.tsx +228 -228
  304. package/src/components/layouts/NotificationsPopover.tsx +120 -120
  305. package/src/components/layouts/ProfilePopover.tsx +191 -191
  306. package/src/components/layouts/SideBarNavigation.tsx +65 -65
  307. package/src/components/layouts/UsersSelectorPopover.tsx +236 -236
  308. package/src/components/layouts/WhitelabelCodes.tsx +59 -59
  309. package/src/components/modals/BuyCreditsModal.tsx +390 -390
  310. package/src/components/modals/CreditsDisabledModal.tsx +62 -62
  311. package/src/components/modals/Modals.tsx +25 -25
  312. package/src/components/modals/PaidPlanRequiredModal.tsx +60 -60
  313. package/src/components/modals/cards/AddCardModal.tsx +420 -420
  314. package/src/components/modals/cards/CannotDeleteCardModal.tsx +124 -124
  315. package/src/components/modals/cards/CardFormFields.tsx +363 -363
  316. package/src/components/modals/cards/DeleteCardModal.tsx +136 -136
  317. package/src/components/navigation/CancelledSubscriptionBanner.tsx +62 -62
  318. package/src/components/navigation/NavItemsContext.ts +20 -20
  319. package/src/components/navigation/OverdueInvoiceBanner.tsx +51 -51
  320. package/src/components/navigation/PendingCancellationBanner.tsx +60 -60
  321. package/src/components/navigation/ProjectSelectorPopover.tsx +180 -180
  322. package/src/components/navigation/SubscriptionBanner.tsx +94 -94
  323. package/src/components/navigation/TrialBanner.tsx +54 -54
  324. package/src/components/navigation/UpcomingInvoiceBanner.tsx +55 -55
  325. package/src/components/navigation/shells/TabsMobileShell.tsx +74 -74
  326. package/src/components/navigation/subcomponents/BottomLinks.tsx +85 -85
  327. package/src/components/navigation/subcomponents/ProjectSelector.tsx +184 -184
  328. package/src/components/pages/NotFoundPage.tsx +75 -75
  329. package/src/components/pages/notifications/Notifications.tsx +190 -190
  330. package/src/components/ui/buttons/Button.tsx +77 -77
  331. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  332. package/src/components/ui/buttons/CopyButton.tsx +59 -59
  333. package/src/components/ui/data-display/Accordion.tsx +81 -81
  334. package/src/components/ui/data-display/Badge.tsx +47 -47
  335. package/src/components/ui/data-display/Card.tsx +93 -93
  336. package/src/components/ui/data-display/CardBrandIcons.tsx +336 -336
  337. package/src/components/ui/data-display/CardItem.tsx +135 -135
  338. package/src/components/ui/data-display/Pagination.tsx +126 -126
  339. package/src/components/ui/data-display/PaymentInfoCard.tsx +193 -193
  340. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  341. package/src/components/ui/data-display/Separator.tsx +29 -29
  342. package/src/components/ui/data-display/Table.tsx +117 -117
  343. package/src/components/ui/data-display/Tabs.tsx +67 -67
  344. package/src/components/ui/feedback/CircularProgress.tsx +79 -79
  345. package/src/components/ui/feedback/DefaultCircularProgress.tsx +67 -67
  346. package/src/components/ui/feedback/LoadingOverlay.tsx +30 -30
  347. package/src/components/ui/feedback/Progress.tsx +40 -40
  348. package/src/components/ui/feedback/Skeleton.tsx +5 -5
  349. package/src/components/ui/feedback/Toast.tsx +104 -104
  350. package/src/components/ui/form/Calendar.tsx +228 -228
  351. package/src/components/ui/form/Checkbox.tsx +31 -31
  352. package/src/components/ui/form/ComboboxField.tsx +159 -159
  353. package/src/components/ui/form/DatePicker.tsx +100 -100
  354. package/src/components/ui/form/DateRangePicker.tsx +111 -111
  355. package/src/components/ui/form/FormField.tsx +133 -133
  356. package/src/components/ui/form/Input.tsx +20 -20
  357. package/src/components/ui/form/InputOtp.tsx +80 -80
  358. package/src/components/ui/form/PhoneInput.tsx +210 -210
  359. package/src/components/ui/form/RadioGroup.tsx +45 -45
  360. package/src/components/ui/form/Select.tsx +200 -200
  361. package/src/components/ui/form/Switch.tsx +32 -32
  362. package/src/components/ui/form/Textarea.tsx +19 -19
  363. package/src/components/ui/overlay/Command.tsx +185 -185
  364. package/src/components/ui/overlay/Dialog.tsx +153 -153
  365. package/src/components/ui/overlay/Popover.tsx +49 -49
  366. package/src/components/ui/overlay/Sheet.tsx +170 -170
  367. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  368. package/src/components/widgets/ImageUpload/ImageCropModal.tsx +392 -392
  369. package/src/components/widgets/ImageUpload/ImageTooSmallModal.tsx +62 -62
  370. package/src/components/widgets/ImageUpload/ImageUpload.tsx +131 -131
  371. package/src/components/widgets/ImageUpload/index.ts +3 -3
  372. package/src/components/widgets/notifications/NotificationCard.tsx +73 -73
  373. package/src/handlers.ts +22 -22
  374. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  375. package/src/hooks/useAuthQueryKey.ts +32 -32
  376. package/src/hooks/useBrandLoadingIcon.tsx +18 -18
  377. package/src/hooks/useRouter.ts +38 -38
  378. package/src/http.ts +1 -1
  379. package/src/i18n/config.ts +17 -17
  380. package/src/i18n/country-language.ts +60 -60
  381. package/src/i18n/messages/en-us.ts +519 -519
  382. package/src/i18n/messages/es-es.ts +520 -520
  383. package/src/i18n/messages/index.ts +24 -24
  384. package/src/i18n/messages/pt-br.ts +543 -543
  385. package/src/i18n/normalize.ts +15 -15
  386. package/src/i18n/resolve-locale.ts +77 -77
  387. package/src/i18n.ts +10 -10
  388. package/src/index.ts +584 -584
  389. package/src/infra/http/api-fetch.ts +39 -39
  390. package/src/infra/route/parse-id.ts +9 -9
  391. package/src/infra/route/parse-numeric.ts +16 -16
  392. package/src/infra/route/safe-route-handler.ts +16 -16
  393. package/src/infra/route/search-params.ts +9 -9
  394. package/src/infra/utils/array.ts +167 -167
  395. package/src/infra/utils/date.ts +59 -59
  396. package/src/middleware.ts +4 -4
  397. package/src/modules/accounts/actions/account-management.action.ts +109 -109
  398. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  399. package/src/modules/accounts/actions/get-account-token.action.ts +8 -8
  400. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  401. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  402. package/src/modules/accounts/hooks/current-account.hook.tsx +26 -26
  403. package/src/modules/accounts/hooks/use-account-token.hook.tsx +14 -14
  404. package/src/modules/accounts/hooks/use-currency-formatter.hook.tsx +32 -32
  405. package/src/modules/accounts/hooks/useAccountManagement.ts +95 -95
  406. package/src/modules/accounts/hooks/useCurrencies.ts +18 -18
  407. package/src/modules/accounts/hooks/useTimezones.ts +18 -18
  408. package/src/modules/accounts/hooks/useViaCep.ts +25 -25
  409. package/src/modules/accounts/services/account-token.service.ts +52 -52
  410. package/src/modules/accounts/services/account.service.ts +243 -243
  411. package/src/modules/accounts/types.ts +230 -230
  412. package/src/modules/auth/actions/social-google-login.action.ts +12 -12
  413. package/src/modules/auth/actions/social-google-onboarding.action.ts +13 -13
  414. package/src/modules/auth/actions/unlink-google.action.ts +8 -8
  415. package/src/modules/auth/actions/validate-session.action.ts +70 -70
  416. package/src/modules/auth/actions/verify-two-factor.action.ts +19 -19
  417. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  418. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  419. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  420. package/src/modules/auth/hooks/social-google-login.hook.tsx +13 -13
  421. package/src/modules/auth/hooks/social-google-onboarding.hook.tsx +13 -13
  422. package/src/modules/auth/hooks/unlink-google.hook.tsx +13 -13
  423. package/src/modules/auth/hooks/useManagementPermissions.ts +52 -52
  424. package/src/modules/auth/hooks/useUserQuery.ts +103 -103
  425. package/src/modules/auth/types/management-permission.type.ts +14 -14
  426. package/src/modules/auth/utils/assert-management-permission.ts +56 -56
  427. package/src/modules/auth/utils/assert-management-subscription.ts +38 -38
  428. package/src/modules/auth/utils/assert-paid-subscription.ts +47 -47
  429. package/src/modules/auth/utils/assert-subscription-addon.ts +42 -42
  430. package/src/modules/auth/utils/build-wl-override.ts +43 -43
  431. package/src/modules/auth/utils/require-token-not-expired.ts +53 -53
  432. package/src/modules/auth/utils/require-valid-session.ts +35 -35
  433. package/src/modules/cards/actions/create-card.action.ts +9 -9
  434. package/src/modules/cards/actions/create-setup-intent.action.ts +8 -8
  435. package/src/modules/cards/actions/delete-card.action.ts +8 -8
  436. package/src/modules/cards/actions/set-default-card.action.ts +8 -8
  437. package/src/modules/cards/handlers/find-card-by-id.handler.ts +15 -15
  438. package/src/modules/cards/handlers/list-cards.handler.ts +10 -10
  439. package/src/modules/cards/hooks/card-by-id.hook.ts +17 -17
  440. package/src/modules/cards/hooks/cards.hook.ts +22 -22
  441. package/src/modules/cards/hooks/create-card.hook.ts +30 -30
  442. package/src/modules/cards/hooks/create-setup-intent.hook.ts +11 -11
  443. package/src/modules/cards/hooks/delete-card.hook.ts +52 -52
  444. package/src/modules/cards/hooks/delete-confirmation.hook.ts +40 -40
  445. package/src/modules/cards/hooks/handle-delete-card.hook.ts +47 -47
  446. package/src/modules/cards/hooks/set-default-card.hook.ts +55 -55
  447. package/src/modules/cards/services/cards.service.ts +136 -136
  448. package/src/modules/cards/types.ts +52 -52
  449. package/src/modules/charges/actions/charge-action.action.ts +13 -13
  450. package/src/modules/charges/handlers/find-charge-by-id.handler.ts +14 -14
  451. package/src/modules/charges/handlers/list-charges.handler.ts +15 -15
  452. package/src/modules/charges/hooks/charge-action.hook.ts +24 -24
  453. package/src/modules/charges/hooks/charge-by-id.hook.ts +19 -19
  454. package/src/modules/charges/hooks/charges.hook.ts +19 -19
  455. package/src/modules/charges/services/charges.service.ts +63 -63
  456. package/src/modules/charges/types/charge.type.ts +68 -68
  457. package/src/modules/ia-credits/handlers/list-ia-credits.handler.ts +14 -14
  458. package/src/modules/ia-credits/hooks/ia-credits.hook.ts +103 -103
  459. package/src/modules/images/actions/process-image.action.ts +40 -40
  460. package/src/modules/images/constants/image.constants.ts +11 -11
  461. package/src/modules/images/hooks/use-image-upload.hook.ts +153 -153
  462. package/src/modules/images/services/image-processing.service.ts +75 -75
  463. package/src/modules/images/types/image.type.ts +54 -54
  464. package/src/modules/images/utils/base64.ts +26 -26
  465. package/src/modules/images/utils/compress-image.ts +20 -20
  466. package/src/modules/images/utils/crop-image.ts +68 -68
  467. package/src/modules/images/utils/validate-image.ts +86 -86
  468. package/src/modules/pages/constants/query-keys.constants.ts +1 -1
  469. package/src/modules/pages/handlers/count-pages.handler.ts +12 -12
  470. package/src/modules/pages/hooks/count-pages.hook.ts +21 -21
  471. package/src/modules/pages/services/pages.service.ts +27 -27
  472. package/src/modules/plans/handlers/find-plan-by-id.handler.ts +14 -14
  473. package/src/modules/plans/handlers/list-plans.handler.ts +22 -22
  474. package/src/modules/plans/hooks/list-plans.hook.ts +23 -23
  475. package/src/modules/plans/hooks/use-has-plan-addon.hook.ts +14 -14
  476. package/src/modules/plans/hooks/use-plan-by-id.hook.ts +39 -39
  477. package/src/modules/plans/services/plans.service.ts +136 -135
  478. package/src/modules/plans/types/plan.type.ts +79 -75
  479. package/src/modules/plans/utils/map-api-plan-to-ui.ts +167 -167
  480. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  481. package/src/modules/projects/actions/create-project.action.ts +9 -9
  482. package/src/modules/projects/actions/delete-project.action.ts +8 -8
  483. package/src/modules/projects/actions/find-project.action.ts +8 -8
  484. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  485. package/src/modules/projects/actions/list-projects.action.ts +16 -16
  486. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  487. package/src/modules/projects/actions/update-project.action.ts +9 -9
  488. package/src/modules/projects/handlers/find-project.handler.ts +15 -15
  489. package/src/modules/projects/handlers/list-all-account-users.handler.ts +23 -23
  490. package/src/modules/projects/handlers/list-available-users.handler.ts +26 -26
  491. package/src/modules/projects/handlers/list-project-users.handler.ts +26 -26
  492. package/src/modules/projects/handlers/list-projects.handler.ts +23 -23
  493. package/src/modules/projects/hooks/add-project-user.hook.ts +72 -72
  494. package/src/modules/projects/hooks/create-project.hook.ts +120 -120
  495. package/src/modules/projects/hooks/delete-project.hook.ts +58 -58
  496. package/src/modules/projects/hooks/find-project.hook.ts +18 -18
  497. package/src/modules/projects/hooks/list-all-account-users.hook.ts +40 -40
  498. package/src/modules/projects/hooks/list-available-users.hook.ts +39 -39
  499. package/src/modules/projects/hooks/list-infinite-projects.hook.ts +44 -44
  500. package/src/modules/projects/hooks/list-project-users.hook.ts +39 -39
  501. package/src/modules/projects/hooks/list-projects.hook.ts +23 -23
  502. package/src/modules/projects/hooks/remove-project-user.hook.ts +72 -72
  503. package/src/modules/projects/hooks/update-project.hook.ts +86 -86
  504. package/src/modules/projects/services/project-users.service.ts +3 -2
  505. package/src/modules/projects/services/projects.service.ts +156 -156
  506. package/src/modules/subscriptions/actions/calculate-subscription.action.ts +9 -9
  507. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  508. package/src/modules/subscriptions/actions/update-subscription-payment.action.ts +13 -13
  509. package/src/modules/subscriptions/actions/update-subscription-plan.action.ts +14 -14
  510. package/src/modules/subscriptions/constants/query-keys.constants.ts +3 -3
  511. package/src/modules/subscriptions/constants/subscription.constants.ts +1 -1
  512. package/src/modules/subscriptions/handlers/list-subscriptions.handler.ts +17 -17
  513. package/src/modules/subscriptions/hooks/calculate-subscription.hook.ts +13 -13
  514. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +22 -22
  515. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +22 -22
  516. package/src/modules/subscriptions/hooks/update-subscription-payment.hook.ts +25 -25
  517. package/src/modules/subscriptions/hooks/update-subscription-plan.hook.ts +28 -28
  518. package/src/modules/subscriptions/hooks/use-cancelled-subscription-guard.ts +44 -44
  519. package/src/modules/subscriptions/types/billing-period.type.ts +1 -1
  520. package/src/modules/subscriptions/types/calculate-subscription.type.ts +116 -116
  521. package/src/modules/subscriptions/types/pix-pending.type.ts +38 -38
  522. package/src/modules/subscriptions/utils/build-plan-extras.ts +56 -56
  523. package/src/modules/subscriptions/utils/get-subscription-cancellation-state.ts +37 -37
  524. package/src/modules/subscriptions/utils/get-subscription-expiry-date.ts +33 -33
  525. package/src/modules/subscriptions/utils/has-subscription-expired.ts +11 -11
  526. package/src/modules/subscriptions/utils/periodicity.ts +79 -79
  527. package/src/modules/subscriptions/utils/resolve-plan-extras-prices.ts +23 -23
  528. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  529. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  530. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  531. package/src/modules/users/handlers/list-messages.handler.ts +39 -39
  532. package/src/modules/users/hooks/messages.hook.ts +69 -69
  533. package/src/modules/users/services/messages.service.ts +49 -49
  534. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  535. package/src/modules/whitelabel/actions/revalidate-whitelabel.action.ts +19 -19
  536. package/src/modules/whitelabel/schema.ts +84 -84
  537. package/src/modules/whitelabel/utils/normalize-hostname.ts +26 -26
  538. package/src/providers/auth.provider.tsx +264 -264
  539. package/src/providers/navigation.provider.tsx +99 -99
  540. package/src/providers/whitelabel.provider.tsx +90 -90
  541. package/src/route.ts +4 -4
  542. package/src/store/useAccountModals.ts +85 -85
  543. package/src/store/useBuyCreditsModal.ts +21 -21
  544. package/src/store/useCreditsDisabledModal.ts +11 -11
  545. package/src/store/useDesktopSidebarStore.ts +47 -47
  546. package/src/store/useMdSidebarStore.ts +34 -34
  547. package/src/store/usePaidPlanRequiredModal.ts +19 -19
  548. package/src/utils/constants/br-states.ts +29 -29
  549. package/src/utils/countries.ts +224 -224
  550. package/src/utils/format/currency.ts +70 -70
  551. package/src/utils/intl/cookie-domain.ts +29 -29
  552. package/src/utils/intl/locale-cookie.ts +18 -18
  553. package/src/utils/next-navigation.ts +7 -7
  554. package/src/utils/redirect.ts +78 -78
  555. package/src/utils/safeMutationAction.ts +24 -24
  556. package/src/utils/safeServerAction.ts +21 -21
  557. package/src/utils/withAction.ts +13 -13
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/subscriptions/utils/periodicity.ts"],"sourcesContent":["import type { BillingPeriod } from '../types/billing-period.type';\r\nimport type { CalculateSubscriptionResponse } from '../types/calculate-subscription.type';\r\n\r\ntype TranslateFn = (key: any, values?: Record<string, string | number>) => string;\r\n\r\nexport function periodicityToBillingPeriod(\r\n periodicity: number | string | null | undefined\r\n): BillingPeriod | null {\r\n if (periodicity === 30 || periodicity === 1 || periodicity === 'monthly') return 'monthly';\r\n if (periodicity === 180 || periodicity === 3 || periodicity === 'semiannual') return 'semiannual';\r\n if (periodicity === 365 || periodicity === 2 || periodicity === 'annual') return 'annual';\r\n return null;\r\n}\r\n\r\nexport function billingPeriodToNumeric(billingPeriod: BillingPeriod): 30 | 180 | 365 {\r\n if (billingPeriod === 'semiannual') return 180;\r\n if (billingPeriod === 'annual') return 365;\r\n return 30;\r\n}\r\n\r\nexport function getPeriodicityLabel(\r\n periodicity: number | string | null | undefined,\r\n translate?: TranslateFn\r\n): string {\r\n const period = periodicityToBillingPeriod(periodicity);\r\n if (period === 'semiannual')\r\n return translate ? translate('common.periodicity.semiannual') : 'Semestral';\r\n if (period === 'annual')\r\n return translate ? translate('common.periodicity.annual') : 'Anual';\r\n return translate ? translate('common.periodicity.monthly') : 'Mensal';\r\n}\r\n\r\nexport function getBillingPeriodSuffix(\r\n billingPeriod: BillingPeriod,\r\n translate?: TranslateFn\r\n): string {\r\n if (billingPeriod === 'semiannual')\r\n return translate ? translate('common.periodicity.suffixSemiannual') : '/semestre';\r\n if (billingPeriod === 'annual')\r\n return translate ? translate('common.periodicity.suffixAnnual') : '/ano';\r\n return translate ? translate('common.periodicity.suffixMonthly') : '/mês';\r\n}\r\n\r\nexport function getBillingPeriodLabel(\r\n billingPeriod: BillingPeriod,\r\n translate?: TranslateFn\r\n): string {\r\n if (billingPeriod === 'semiannual')\r\n return translate ? translate('common.periodicity.labelSemiannual') : 'semestral';\r\n if (billingPeriod === 'annual')\r\n return translate ? translate('common.periodicity.labelAnnual') : 'anual';\r\n return translate ? translate('common.periodicity.labelMonthly') : 'mensal';\r\n}\r\n\r\nexport function getBillingPeriodMonths(billingPeriod: BillingPeriod): number {\r\n if (billingPeriod === 'semiannual') return 6;\r\n if (billingPeriod === 'annual') return 12;\r\n return 1;\r\n}\r\n\r\nexport function getPriceFromCalculatedData(\r\n data: CalculateSubscriptionResponse,\r\n periodicity: number | string | null | undefined\r\n): number {\r\n const period = periodicityToBillingPeriod(periodicity);\r\n if (period === 'annual') return data.year;\r\n if (period === 'semiannual') return data.semmester;\r\n return data.month;\r\n}\r\n\r\nexport function getOriginalPriceFromCalculatedData(\r\n data: CalculateSubscriptionResponse,\r\n periodicity: number | string | null | undefined\r\n): number {\r\n const period = periodicityToBillingPeriod(periodicity);\r\n if (period === 'annual') return data.year_original;\r\n if (period === 'semiannual') return data.semmester_original;\r\n return data.month_original;\r\n}\r\n"],"mappings":"AAKO,SAAS,2BACd,aACsB;AACtB,MAAI,gBAAgB,MAAM,gBAAgB,KAAK,gBAAgB,UAAW,QAAO;AACjF,MAAI,gBAAgB,OAAO,gBAAgB,KAAK,gBAAgB,aAAc,QAAO;AACrF,MAAI,gBAAgB,OAAO,gBAAgB,KAAK,gBAAgB,SAAU,QAAO;AACjF,SAAO;AACT;AAEO,SAAS,uBAAuB,eAA8C;AACnF,MAAI,kBAAkB,aAAc,QAAO;AAC3C,MAAI,kBAAkB,SAAU,QAAO;AACvC,SAAO;AACT;AAEO,SAAS,oBACd,aACA,WACQ;AACR,QAAM,SAAS,2BAA2B,WAAW;AACrD,MAAI,WAAW;AACb,WAAO,YAAY,UAAU,+BAA+B,IAAI;AAClE,MAAI,WAAW;AACb,WAAO,YAAY,UAAU,2BAA2B,IAAI;AAC9D,SAAO,YAAY,UAAU,4BAA4B,IAAI;AAC/D;AAEO,SAAS,uBACd,eACA,WACQ;AACR,MAAI,kBAAkB;AACpB,WAAO,YAAY,UAAU,qCAAqC,IAAI;AACxE,MAAI,kBAAkB;AACpB,WAAO,YAAY,UAAU,iCAAiC,IAAI;AACpE,SAAO,YAAY,UAAU,kCAAkC,IAAI;AACrE;AAEO,SAAS,sBACd,eACA,WACQ;AACR,MAAI,kBAAkB;AACpB,WAAO,YAAY,UAAU,oCAAoC,IAAI;AACvE,MAAI,kBAAkB;AACpB,WAAO,YAAY,UAAU,gCAAgC,IAAI;AACnE,SAAO,YAAY,UAAU,iCAAiC,IAAI;AACpE;AAEO,SAAS,uBAAuB,eAAsC;AAC3E,MAAI,kBAAkB,aAAc,QAAO;AAC3C,MAAI,kBAAkB,SAAU,QAAO;AACvC,SAAO;AACT;AAEO,SAAS,2BACd,MACA,aACQ;AACR,QAAM,SAAS,2BAA2B,WAAW;AACrD,MAAI,WAAW,SAAU,QAAO,KAAK;AACrC,MAAI,WAAW,aAAc,QAAO,KAAK;AACzC,SAAO,KAAK;AACd;AAEO,SAAS,mCACd,MACA,aACQ;AACR,QAAM,SAAS,2BAA2B,WAAW;AACrD,MAAI,WAAW,SAAU,QAAO,KAAK;AACrC,MAAI,WAAW,aAAc,QAAO,KAAK;AACzC,SAAO,KAAK;AACd;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/subscriptions/utils/periodicity.ts"],"sourcesContent":["import type { BillingPeriod } from '../types/billing-period.type';\nimport type { CalculateSubscriptionResponse } from '../types/calculate-subscription.type';\n\ntype TranslateFn = (key: any, values?: Record<string, string | number>) => string;\n\nexport function periodicityToBillingPeriod(\n periodicity: number | string | null | undefined\n): BillingPeriod | null {\n if (periodicity === 30 || periodicity === 1 || periodicity === 'monthly') return 'monthly';\n if (periodicity === 180 || periodicity === 3 || periodicity === 'semiannual') return 'semiannual';\n if (periodicity === 365 || periodicity === 2 || periodicity === 'annual') return 'annual';\n return null;\n}\n\nexport function billingPeriodToNumeric(billingPeriod: BillingPeriod): 30 | 180 | 365 {\n if (billingPeriod === 'semiannual') return 180;\n if (billingPeriod === 'annual') return 365;\n return 30;\n}\n\nexport function getPeriodicityLabel(\n periodicity: number | string | null | undefined,\n translate?: TranslateFn\n): string {\n const period = periodicityToBillingPeriod(periodicity);\n if (period === 'semiannual')\n return translate ? translate('common.periodicity.semiannual') : 'Semestral';\n if (period === 'annual')\n return translate ? translate('common.periodicity.annual') : 'Anual';\n return translate ? translate('common.periodicity.monthly') : 'Mensal';\n}\n\nexport function getBillingPeriodSuffix(\n billingPeriod: BillingPeriod,\n translate?: TranslateFn\n): string {\n if (billingPeriod === 'semiannual')\n return translate ? translate('common.periodicity.suffixSemiannual') : '/semestre';\n if (billingPeriod === 'annual')\n return translate ? translate('common.periodicity.suffixAnnual') : '/ano';\n return translate ? translate('common.periodicity.suffixMonthly') : '/mês';\n}\n\nexport function getBillingPeriodLabel(\n billingPeriod: BillingPeriod,\n translate?: TranslateFn\n): string {\n if (billingPeriod === 'semiannual')\n return translate ? translate('common.periodicity.labelSemiannual') : 'semestral';\n if (billingPeriod === 'annual')\n return translate ? translate('common.periodicity.labelAnnual') : 'anual';\n return translate ? translate('common.periodicity.labelMonthly') : 'mensal';\n}\n\nexport function getBillingPeriodMonths(billingPeriod: BillingPeriod): number {\n if (billingPeriod === 'semiannual') return 6;\n if (billingPeriod === 'annual') return 12;\n return 1;\n}\n\nexport function getPriceFromCalculatedData(\n data: CalculateSubscriptionResponse,\n periodicity: number | string | null | undefined\n): number {\n const period = periodicityToBillingPeriod(periodicity);\n if (period === 'annual') return data.year;\n if (period === 'semiannual') return data.semmester;\n return data.month;\n}\n\nexport function getOriginalPriceFromCalculatedData(\n data: CalculateSubscriptionResponse,\n periodicity: number | string | null | undefined\n): number {\n const period = periodicityToBillingPeriod(periodicity);\n if (period === 'annual') return data.year_original;\n if (period === 'semiannual') return data.semmester_original;\n return data.month_original;\n}\n"],"mappings":"AAKO,SAAS,2BACd,aACsB;AACtB,MAAI,gBAAgB,MAAM,gBAAgB,KAAK,gBAAgB,UAAW,QAAO;AACjF,MAAI,gBAAgB,OAAO,gBAAgB,KAAK,gBAAgB,aAAc,QAAO;AACrF,MAAI,gBAAgB,OAAO,gBAAgB,KAAK,gBAAgB,SAAU,QAAO;AACjF,SAAO;AACT;AAEO,SAAS,uBAAuB,eAA8C;AACnF,MAAI,kBAAkB,aAAc,QAAO;AAC3C,MAAI,kBAAkB,SAAU,QAAO;AACvC,SAAO;AACT;AAEO,SAAS,oBACd,aACA,WACQ;AACR,QAAM,SAAS,2BAA2B,WAAW;AACrD,MAAI,WAAW;AACb,WAAO,YAAY,UAAU,+BAA+B,IAAI;AAClE,MAAI,WAAW;AACb,WAAO,YAAY,UAAU,2BAA2B,IAAI;AAC9D,SAAO,YAAY,UAAU,4BAA4B,IAAI;AAC/D;AAEO,SAAS,uBACd,eACA,WACQ;AACR,MAAI,kBAAkB;AACpB,WAAO,YAAY,UAAU,qCAAqC,IAAI;AACxE,MAAI,kBAAkB;AACpB,WAAO,YAAY,UAAU,iCAAiC,IAAI;AACpE,SAAO,YAAY,UAAU,kCAAkC,IAAI;AACrE;AAEO,SAAS,sBACd,eACA,WACQ;AACR,MAAI,kBAAkB;AACpB,WAAO,YAAY,UAAU,oCAAoC,IAAI;AACvE,MAAI,kBAAkB;AACpB,WAAO,YAAY,UAAU,gCAAgC,IAAI;AACnE,SAAO,YAAY,UAAU,iCAAiC,IAAI;AACpE;AAEO,SAAS,uBAAuB,eAAsC;AAC3E,MAAI,kBAAkB,aAAc,QAAO;AAC3C,MAAI,kBAAkB,SAAU,QAAO;AACvC,SAAO;AACT;AAEO,SAAS,2BACd,MACA,aACQ;AACR,QAAM,SAAS,2BAA2B,WAAW;AACrD,MAAI,WAAW,SAAU,QAAO,KAAK;AACrC,MAAI,WAAW,aAAc,QAAO,KAAK;AACzC,SAAO,KAAK;AACd;AAEO,SAAS,mCACd,MACA,aACQ;AACR,QAAM,SAAS,2BAA2B,WAAW;AACrD,MAAI,WAAW,SAAU,QAAO,KAAK;AACrC,MAAI,WAAW,aAAc,QAAO,KAAK;AACzC,SAAO,KAAK;AACd;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/subscriptions/utils/resolve-plan-extras-prices.ts"],"sourcesContent":["import 'server-only';\r\n\r\nimport type { SubscriptionItem } from '../types/subscription.type';\r\n\r\ninterface PlanExtraInput {\r\n id_addon: number;\r\n value?: number;\r\n quantity: number;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport function resolvePlanExtrasPrices<T extends PlanExtraInput>(\r\n extras: T[],\r\n subscriptionItems: SubscriptionItem[]\r\n): T[] {\r\n return extras.map((extra) => {\r\n const item = subscriptionItems.find((i) => i.id_addon === extra.id_addon);\r\n if (item) {\r\n return { ...extra, value: item.value ?? 0 };\r\n }\r\n return { ...extra, value: extra.value ?? 0 };\r\n });\r\n}\r\n"],"mappings":"AAAA,OAAO;AAWA,SAAS,wBACd,QACA,mBACK;AACL,SAAO,OAAO,IAAI,CAAC,UAAU;AAC3B,UAAM,OAAO,kBAAkB,KAAK,CAAC,MAAM,EAAE,aAAa,MAAM,QAAQ;AACxE,QAAI,MAAM;AACR,aAAO,EAAE,GAAG,OAAO,OAAO,KAAK,SAAS,EAAE;AAAA,IAC5C;AACA,WAAO,EAAE,GAAG,OAAO,OAAO,MAAM,SAAS,EAAE;AAAA,EAC7C,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/subscriptions/utils/resolve-plan-extras-prices.ts"],"sourcesContent":["import 'server-only';\n\nimport type { SubscriptionItem } from '../types/subscription.type';\n\ninterface PlanExtraInput {\n id_addon: number;\n value?: number;\n quantity: number;\n [key: string]: unknown;\n}\n\nexport function resolvePlanExtrasPrices<T extends PlanExtraInput>(\n extras: T[],\n subscriptionItems: SubscriptionItem[]\n): T[] {\n return extras.map((extra) => {\n const item = subscriptionItems.find((i) => i.id_addon === extra.id_addon);\n if (item) {\n return { ...extra, value: item.value ?? 0 };\n }\n return { ...extra, value: extra.value ?? 0 };\n });\n}\n"],"mappings":"AAAA,OAAO;AAWA,SAAS,wBACd,QACA,mBACK;AACL,SAAO,OAAO,IAAI,CAAC,UAAU;AAC3B,UAAM,OAAO,kBAAkB,KAAK,CAAC,MAAM,EAAE,aAAa,MAAM,QAAQ;AACxE,QAAI,MAAM;AACR,aAAO,EAAE,GAAG,OAAO,OAAO,KAAK,SAAS,EAAE;AAAA,IAC5C;AACA,WAAO,EAAE,GAAG,OAAO,OAAO,MAAM,SAAS,EAAE;AAAA,EAC7C,CAAC;AACH;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/users/action/find-user-by-id.action.ts"],"sourcesContent":["'use server';\r\n\r\nimport { safeServerAction } from '../../../utils/safeServerAction';\r\nimport { userService } from '../services/user.service';\r\n\r\nexport async function findUserById() {\r\n return safeServerAction(() => userService.findById());\r\n}\r\n"],"mappings":";AAEA,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAE5B,eAAsB,eAAe;AACnC,SAAO,iBAAiB,MAAM,YAAY,SAAS,CAAC;AACtD;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/users/action/find-user-by-id.action.ts"],"sourcesContent":["'use server';\n\nimport { safeServerAction } from '../../../utils/safeServerAction';\nimport { userService } from '../services/user.service';\n\nexport async function findUserById() {\n return safeServerAction(() => userService.findById());\n}\n"],"mappings":";AAEA,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAE5B,eAAsB,eAAe;AACnC,SAAO,iBAAiB,MAAM,YAAY,SAAS,CAAC;AACtD;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/users/action/mark-all-messages-as-read.action.ts"],"sourcesContent":["'use server';\r\n\r\nimport { safeMutationAction } from '../../../utils/safeMutationAction';\r\nimport { messagesService } from '../services/messages.service';\r\n\r\nexport async function markAllMessagesAsReadAction() {\r\n return safeMutationAction(() => messagesService.markAllAsRead());\r\n}\r\n"],"mappings":";AAEA,SAAS,0BAA0B;AACnC,SAAS,uBAAuB;AAEhC,eAAsB,8BAA8B;AAClD,SAAO,mBAAmB,MAAM,gBAAgB,cAAc,CAAC;AACjE;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/users/action/mark-all-messages-as-read.action.ts"],"sourcesContent":["'use server';\n\nimport { safeMutationAction } from '../../../utils/safeMutationAction';\nimport { messagesService } from '../services/messages.service';\n\nexport async function markAllMessagesAsReadAction() {\n return safeMutationAction(() => messagesService.markAllAsRead());\n}\n"],"mappings":";AAEA,SAAS,0BAA0B;AACnC,SAAS,uBAAuB;AAEhC,eAAsB,8BAA8B;AAClD,SAAO,mBAAmB,MAAM,gBAAgB,cAAc,CAAC;AACjE;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/users/action/mark-message-as-read.action.ts"],"sourcesContent":["'use server';\r\n\r\nimport { safeMutationAction } from '../../../utils/safeMutationAction';\r\nimport { messagesService } from '../services/messages.service';\r\n\r\nexport async function markMessageAsReadAction(messageId: string) {\r\n return safeMutationAction(() => messagesService.markAsRead(messageId));\r\n}\r\n"],"mappings":";AAEA,SAAS,0BAA0B;AACnC,SAAS,uBAAuB;AAEhC,eAAsB,wBAAwB,WAAmB;AAC/D,SAAO,mBAAmB,MAAM,gBAAgB,WAAW,SAAS,CAAC;AACvE;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/users/action/mark-message-as-read.action.ts"],"sourcesContent":["'use server';\n\nimport { safeMutationAction } from '../../../utils/safeMutationAction';\nimport { messagesService } from '../services/messages.service';\n\nexport async function markMessageAsReadAction(messageId: string) {\n return safeMutationAction(() => messagesService.markAsRead(messageId));\n}\n"],"mappings":";AAEA,SAAS,0BAA0B;AACnC,SAAS,uBAAuB;AAEhC,eAAsB,wBAAwB,WAAmB;AAC/D,SAAO,mBAAmB,MAAM,gBAAgB,WAAW,SAAS,CAAC;AACvE;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/users/handlers/list-messages.handler.ts"],"sourcesContent":["import 'server-only';\r\n\r\nimport type { NextRequest } from 'next/server';\r\nimport { safeRouteHandler } from '../../../infra/route/safe-route-handler';\r\nimport { searchParamsToParams } from '../../../infra/route/search-params';\r\nimport { messagesService } from '../services/messages.service';\r\nimport type { FindMessagesParams } from '../schema/messages.schema';\r\nimport { findWhitelabel } from '../../whitelabel/actions/find-whitelabel.action';\r\n\r\nexport function createListMessagesHandler() {\r\n return async function GET(req: NextRequest) {\r\n return safeRouteHandler(async () => {\r\n const params = searchParamsToParams<FindMessagesParams>(req.nextUrl.searchParams);\r\n\r\n const [result, whitelabel] = await Promise.all([\r\n messagesService.listMessages(params),\r\n findWhitelabel(),\r\n ]);\r\n\r\n const urlMap: Record<string, string> = {\r\n pages_url: whitelabel?.pages_url ?? '',\r\n accounts_url: whitelabel?.accounts_url ?? '',\r\n editor_url: whitelabel?.editor_url ?? '',\r\n };\r\n\r\n return {\r\n data: result.data.map((message) => ({\r\n ...message,\r\n url: message.url.replace(\r\n /\\{(pages_url|accounts_url|editor_url)\\}/g,\r\n (_, key) => urlMap[key] ?? ''\r\n ),\r\n })),\r\n total: result.total,\r\n totalUnread: result.totalUnread,\r\n };\r\n });\r\n };\r\n}\r\n"],"mappings":"AAAA,OAAO;AAGP,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AACrC,SAAS,uBAAuB;AAEhC,SAAS,sBAAsB;AAExB,SAAS,4BAA4B;AAC1C,SAAO,eAAe,IAAI,KAAkB;AAC1C,WAAO,iBAAiB,YAAY;AAClC,YAAM,SAAS,qBAAyC,IAAI,QAAQ,YAAY;AAEhF,YAAM,CAAC,QAAQ,UAAU,IAAI,MAAM,QAAQ,IAAI;AAAA,QAC7C,gBAAgB,aAAa,MAAM;AAAA,QACnC,eAAe;AAAA,MACjB,CAAC;AAED,YAAM,SAAiC;AAAA,QACrC,WAAW,YAAY,aAAa;AAAA,QACpC,cAAc,YAAY,gBAAgB;AAAA,QAC1C,YAAY,YAAY,cAAc;AAAA,MACxC;AAEA,aAAO;AAAA,QACL,MAAM,OAAO,KAAK,IAAI,CAAC,aAAa;AAAA,UAClC,GAAG;AAAA,UACH,KAAK,QAAQ,IAAI;AAAA,YACf;AAAA,YACA,CAAC,GAAG,QAAQ,OAAO,GAAG,KAAK;AAAA,UAC7B;AAAA,QACF,EAAE;AAAA,QACF,OAAO,OAAO;AAAA,QACd,aAAa,OAAO;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/users/handlers/list-messages.handler.ts"],"sourcesContent":["import 'server-only';\n\nimport type { NextRequest } from 'next/server';\nimport { safeRouteHandler } from '../../../infra/route/safe-route-handler';\nimport { searchParamsToParams } from '../../../infra/route/search-params';\nimport { messagesService } from '../services/messages.service';\nimport type { FindMessagesParams } from '../schema/messages.schema';\nimport { findWhitelabel } from '../../whitelabel/actions/find-whitelabel.action';\n\nexport function createListMessagesHandler() {\n return async function GET(req: NextRequest) {\n return safeRouteHandler(async () => {\n const params = searchParamsToParams<FindMessagesParams>(req.nextUrl.searchParams);\n\n const [result, whitelabel] = await Promise.all([\n messagesService.listMessages(params),\n findWhitelabel(),\n ]);\n\n const urlMap: Record<string, string> = {\n pages_url: whitelabel?.pages_url ?? '',\n accounts_url: whitelabel?.accounts_url ?? '',\n editor_url: whitelabel?.editor_url ?? '',\n };\n\n return {\n data: result.data.map((message) => ({\n ...message,\n url: message.url.replace(\n /\\{(pages_url|accounts_url|editor_url)\\}/g,\n (_, key) => urlMap[key] ?? ''\n ),\n })),\n total: result.total,\n totalUnread: result.totalUnread,\n };\n });\n };\n}\n"],"mappings":"AAAA,OAAO;AAGP,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AACrC,SAAS,uBAAuB;AAEhC,SAAS,sBAAsB;AAExB,SAAS,4BAA4B;AAC1C,SAAO,eAAe,IAAI,KAAkB;AAC1C,WAAO,iBAAiB,YAAY;AAClC,YAAM,SAAS,qBAAyC,IAAI,QAAQ,YAAY;AAEhF,YAAM,CAAC,QAAQ,UAAU,IAAI,MAAM,QAAQ,IAAI;AAAA,QAC7C,gBAAgB,aAAa,MAAM;AAAA,QACnC,eAAe;AAAA,MACjB,CAAC;AAED,YAAM,SAAiC;AAAA,QACrC,WAAW,YAAY,aAAa;AAAA,QACpC,cAAc,YAAY,gBAAgB;AAAA,QAC1C,YAAY,YAAY,cAAc;AAAA,MACxC;AAEA,aAAO;AAAA,QACL,MAAM,OAAO,KAAK,IAAI,CAAC,aAAa;AAAA,UAClC,GAAG;AAAA,UACH,KAAK,QAAQ,IAAI;AAAA,YACf;AAAA,YACA,CAAC,GAAG,QAAQ,OAAO,GAAG,KAAK;AAAA,UAC7B;AAAA,QACF,EAAE;AAAA,QACF,OAAO,OAAO;AAAA,QACd,aAAa,OAAO;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/users/hooks/messages.hook.ts"],"sourcesContent":["'use client';\r\n\r\nimport { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\r\nimport { apiFetch } from '../../../infra/http/api-fetch';\r\nimport { markMessageAsReadAction } from '../action/mark-message-as-read.action';\r\nimport { markAllMessagesAsReadAction } from '../action/mark-all-messages-as-read.action';\r\nimport { withAction } from '../../../utils/withAction';\r\nimport type { FindMessagesParams, ListMessagesResult } from '../schema/messages.schema';\r\nimport { useAuthQueryKey } from '../../../hooks/useAuthQueryKey';\r\n\r\nexport const MESSAGES_QUERY_KEY = ['messages'] as const;\r\n\r\nconst INFINITE_MESSAGES_PAGE_SIZE = 10;\r\n\r\nexport function useMessages(params?: Partial<FindMessagesParams>) {\r\n const queryKey = useAuthQueryKey([...MESSAGES_QUERY_KEY, params]);\r\n\r\n return useQuery({\r\n queryKey,\r\n queryFn: ({ signal }) =>\r\n apiFetch<ListMessagesResult>('/api/messages', { params, signal }),\r\n });\r\n}\r\n\r\nexport function useInfiniteMessages(params?: Partial<Omit<FindMessagesParams, 'page' | 'limit'>>) {\r\n const queryKey = useAuthQueryKey([...MESSAGES_QUERY_KEY, 'infinite', params]);\r\n\r\n return useInfiniteQuery({\r\n queryKey,\r\n queryFn: ({ pageParam, signal }) =>\r\n apiFetch<ListMessagesResult>('/api/messages', {\r\n params: {\r\n ...params,\r\n page: pageParam as number,\r\n limit: INFINITE_MESSAGES_PAGE_SIZE,\r\n },\r\n signal,\r\n }),\r\n getNextPageParam: (lastPage, allPages) => {\r\n const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);\r\n return loaded < lastPage.total ? allPages.length + 1 : undefined;\r\n },\r\n initialPageParam: 1,\r\n });\r\n}\r\n\r\nexport function useMarkMessageAsRead() {\r\n const queryClient = useQueryClient();\r\n const messagesKey = useAuthQueryKey([...MESSAGES_QUERY_KEY]);\r\n\r\n return useMutation({\r\n mutationFn: withAction(markMessageAsReadAction),\r\n onSuccess: () => {\r\n queryClient.invalidateQueries({ queryKey: messagesKey });\r\n },\r\n });\r\n}\r\n\r\nexport function useMarkAllMessagesAsRead() {\r\n const queryClient = useQueryClient();\r\n const messagesKey = useAuthQueryKey([...MESSAGES_QUERY_KEY]);\r\n\r\n return useMutation({\r\n mutationFn: withAction(markAllMessagesAsReadAction),\r\n onSuccess: () => {\r\n queryClient.invalidateQueries({ queryKey: messagesKey });\r\n },\r\n });\r\n}\r\n"],"mappings":";AAEA,SAAS,kBAAkB,aAAa,UAAU,sBAAsB;AACxE,SAAS,gBAAgB;AACzB,SAAS,+BAA+B;AACxC,SAAS,mCAAmC;AAC5C,SAAS,kBAAkB;AAE3B,SAAS,uBAAuB;AAEzB,MAAM,qBAAqB,CAAC,UAAU;AAE7C,MAAM,8BAA8B;AAE7B,SAAS,YAAY,QAAsC;AAChE,QAAM,WAAW,gBAAgB,CAAC,GAAG,oBAAoB,MAAM,CAAC;AAEhE,SAAO,SAAS;AAAA,IACd;AAAA,IACA,SAAS,CAAC,EAAE,OAAO,MACjB,SAA6B,iBAAiB,EAAE,QAAQ,OAAO,CAAC;AAAA,EACpE,CAAC;AACH;AAEO,SAAS,oBAAoB,QAA8D;AAChG,QAAM,WAAW,gBAAgB,CAAC,GAAG,oBAAoB,YAAY,MAAM,CAAC;AAE5E,SAAO,iBAAiB;AAAA,IACtB;AAAA,IACA,SAAS,CAAC,EAAE,WAAW,OAAO,MAC5B,SAA6B,iBAAiB;AAAA,MAC5C,QAAQ;AAAA,QACN,GAAG;AAAA,QACH,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,kBAAkB,CAAC,UAAU,aAAa;AACxC,YAAM,SAAS,SAAS,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,KAAK,QAAQ,CAAC;AACjE,aAAO,SAAS,SAAS,QAAQ,SAAS,SAAS,IAAI;AAAA,IACzD;AAAA,IACA,kBAAkB;AAAA,EACpB,CAAC;AACH;AAEO,SAAS,uBAAuB;AACrC,QAAM,cAAc,eAAe;AACnC,QAAM,cAAc,gBAAgB,CAAC,GAAG,kBAAkB,CAAC;AAE3D,SAAO,YAAY;AAAA,IACjB,YAAY,WAAW,uBAAuB;AAAA,IAC9C,WAAW,MAAM;AACf,kBAAY,kBAAkB,EAAE,UAAU,YAAY,CAAC;AAAA,IACzD;AAAA,EACF,CAAC;AACH;AAEO,SAAS,2BAA2B;AACzC,QAAM,cAAc,eAAe;AACnC,QAAM,cAAc,gBAAgB,CAAC,GAAG,kBAAkB,CAAC;AAE3D,SAAO,YAAY;AAAA,IACjB,YAAY,WAAW,2BAA2B;AAAA,IAClD,WAAW,MAAM;AACf,kBAAY,kBAAkB,EAAE,UAAU,YAAY,CAAC;AAAA,IACzD;AAAA,EACF,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/users/hooks/messages.hook.ts"],"sourcesContent":["'use client';\n\nimport { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from '../../../infra/http/api-fetch';\nimport { markMessageAsReadAction } from '../action/mark-message-as-read.action';\nimport { markAllMessagesAsReadAction } from '../action/mark-all-messages-as-read.action';\nimport { withAction } from '../../../utils/withAction';\nimport type { FindMessagesParams, ListMessagesResult } from '../schema/messages.schema';\nimport { useAuthQueryKey } from '../../../hooks/useAuthQueryKey';\n\nexport const MESSAGES_QUERY_KEY = ['messages'] as const;\n\nconst INFINITE_MESSAGES_PAGE_SIZE = 10;\n\nexport function useMessages(params?: Partial<FindMessagesParams>) {\n const queryKey = useAuthQueryKey([...MESSAGES_QUERY_KEY, params]);\n\n return useQuery({\n queryKey,\n queryFn: ({ signal }) =>\n apiFetch<ListMessagesResult>('/api/messages', { params, signal }),\n });\n}\n\nexport function useInfiniteMessages(params?: Partial<Omit<FindMessagesParams, 'page' | 'limit'>>) {\n const queryKey = useAuthQueryKey([...MESSAGES_QUERY_KEY, 'infinite', params]);\n\n return useInfiniteQuery({\n queryKey,\n queryFn: ({ pageParam, signal }) =>\n apiFetch<ListMessagesResult>('/api/messages', {\n params: {\n ...params,\n page: pageParam as number,\n limit: INFINITE_MESSAGES_PAGE_SIZE,\n },\n signal,\n }),\n getNextPageParam: (lastPage, allPages) => {\n const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);\n return loaded < lastPage.total ? allPages.length + 1 : undefined;\n },\n initialPageParam: 1,\n });\n}\n\nexport function useMarkMessageAsRead() {\n const queryClient = useQueryClient();\n const messagesKey = useAuthQueryKey([...MESSAGES_QUERY_KEY]);\n\n return useMutation({\n mutationFn: withAction(markMessageAsReadAction),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: messagesKey });\n },\n });\n}\n\nexport function useMarkAllMessagesAsRead() {\n const queryClient = useQueryClient();\n const messagesKey = useAuthQueryKey([...MESSAGES_QUERY_KEY]);\n\n return useMutation({\n mutationFn: withAction(markAllMessagesAsReadAction),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: messagesKey });\n },\n });\n}\n"],"mappings":";AAEA,SAAS,kBAAkB,aAAa,UAAU,sBAAsB;AACxE,SAAS,gBAAgB;AACzB,SAAS,+BAA+B;AACxC,SAAS,mCAAmC;AAC5C,SAAS,kBAAkB;AAE3B,SAAS,uBAAuB;AAEzB,MAAM,qBAAqB,CAAC,UAAU;AAE7C,MAAM,8BAA8B;AAE7B,SAAS,YAAY,QAAsC;AAChE,QAAM,WAAW,gBAAgB,CAAC,GAAG,oBAAoB,MAAM,CAAC;AAEhE,SAAO,SAAS;AAAA,IACd;AAAA,IACA,SAAS,CAAC,EAAE,OAAO,MACjB,SAA6B,iBAAiB,EAAE,QAAQ,OAAO,CAAC;AAAA,EACpE,CAAC;AACH;AAEO,SAAS,oBAAoB,QAA8D;AAChG,QAAM,WAAW,gBAAgB,CAAC,GAAG,oBAAoB,YAAY,MAAM,CAAC;AAE5E,SAAO,iBAAiB;AAAA,IACtB;AAAA,IACA,SAAS,CAAC,EAAE,WAAW,OAAO,MAC5B,SAA6B,iBAAiB;AAAA,MAC5C,QAAQ;AAAA,QACN,GAAG;AAAA,QACH,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,kBAAkB,CAAC,UAAU,aAAa;AACxC,YAAM,SAAS,SAAS,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,KAAK,QAAQ,CAAC;AACjE,aAAO,SAAS,SAAS,QAAQ,SAAS,SAAS,IAAI;AAAA,IACzD;AAAA,IACA,kBAAkB;AAAA,EACpB,CAAC;AACH;AAEO,SAAS,uBAAuB;AACrC,QAAM,cAAc,eAAe;AACnC,QAAM,cAAc,gBAAgB,CAAC,GAAG,kBAAkB,CAAC;AAE3D,SAAO,YAAY;AAAA,IACjB,YAAY,WAAW,uBAAuB;AAAA,IAC9C,WAAW,MAAM;AACf,kBAAY,kBAAkB,EAAE,UAAU,YAAY,CAAC;AAAA,IACzD;AAAA,EACF,CAAC;AACH;AAEO,SAAS,2BAA2B;AACzC,QAAM,cAAc,eAAe;AACnC,QAAM,cAAc,gBAAgB,CAAC,GAAG,kBAAkB,CAAC;AAE3D,SAAO,YAAY;AAAA,IACjB,YAAY,WAAW,2BAA2B;AAAA,IAClD,WAAW,MAAM;AACf,kBAAY,kBAAkB,EAAE,UAAU,YAAY,CAAC;AAAA,IACzD;AAAA,EACF,CAAC;AACH;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/users/services/messages.service.ts"],"sourcesContent":["import 'server-only';\r\n\r\nimport { api } from '../../../infra/api/client';\r\nimport { buildQueryParams } from '../../../infra/utils/params';\r\nimport { getUserContext } from '../../auth/utils/get-user-context';\r\nimport {\r\n FindMessagesParams,\r\n ListMessagesApiResponse,\r\n MarkAsReadApiResponse,\r\n MarkAllAsReadApiResponse,\r\n} from '../schema/messages.schema';\r\n\r\nclass MessagesService {\r\n async listMessages(\r\n params?: Partial<FindMessagesParams>\r\n ): Promise<ListMessagesApiResponse> {\r\n const { id_account, id_user } = await getUserContext();\r\n\r\n const query = buildQueryParams({\r\n id_account,\r\n id_user,\r\n type: 'notification',\r\n limit: 20,\r\n page: 1,\r\n order: 'desc',\r\n ...params,\r\n });\r\n\r\n const url = `/accounts/${id_account}/messages${query ? `?${query}` : ''}`;\r\n\r\n return api.apps.get<ListMessagesApiResponse>(url);\r\n }\r\n\r\n async markAsRead(messageId: string): Promise<MarkAsReadApiResponse> {\r\n const { id_account } = await getUserContext();\r\n\r\n const url = `/accounts/${id_account}/messages/${messageId}/action/markAsRead`;\r\n return api.apps.put<MarkAsReadApiResponse>(url);\r\n }\r\n\r\n async markAllAsRead(): Promise<MarkAllAsReadApiResponse> {\r\n const { id_account, id_user } = await getUserContext();\r\n\r\n const url = `/accounts/${id_account}/messages/action/markAllAsRead`;\r\n return api.apps.put<MarkAllAsReadApiResponse>(url, { id_user });\r\n }\r\n}\r\n\r\nexport const messagesService = new MessagesService();\r\n"],"mappings":"AAAA,OAAO;AAEP,SAAS,WAAW;AACpB,SAAS,wBAAwB;AACjC,SAAS,sBAAsB;AAQ/B,MAAM,gBAAgB;AAAA,EACpB,MAAM,aACJ,QACkC;AAClC,UAAM,EAAE,YAAY,QAAQ,IAAI,MAAM,eAAe;AAErD,UAAM,QAAQ,iBAAiB;AAAA,MAC7B;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,MACP,GAAG;AAAA,IACL,CAAC;AAED,UAAM,MAAM,aAAa,UAAU,YAAY,QAAQ,IAAI,KAAK,KAAK,EAAE;AAEvE,WAAO,IAAI,KAAK,IAA6B,GAAG;AAAA,EAClD;AAAA,EAEA,MAAM,WAAW,WAAmD;AAClE,UAAM,EAAE,WAAW,IAAI,MAAM,eAAe;AAE5C,UAAM,MAAM,aAAa,UAAU,aAAa,SAAS;AACzD,WAAO,IAAI,KAAK,IAA2B,GAAG;AAAA,EAChD;AAAA,EAEA,MAAM,gBAAmD;AACvD,UAAM,EAAE,YAAY,QAAQ,IAAI,MAAM,eAAe;AAErD,UAAM,MAAM,aAAa,UAAU;AACnC,WAAO,IAAI,KAAK,IAA8B,KAAK,EAAE,QAAQ,CAAC;AAAA,EAChE;AACF;AAEO,MAAM,kBAAkB,IAAI,gBAAgB;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/users/services/messages.service.ts"],"sourcesContent":["import 'server-only';\n\nimport { api } from '../../../infra/api/client';\nimport { buildQueryParams } from '../../../infra/utils/params';\nimport { getUserContext } from '../../auth/utils/get-user-context';\nimport {\n FindMessagesParams,\n ListMessagesApiResponse,\n MarkAsReadApiResponse,\n MarkAllAsReadApiResponse,\n} from '../schema/messages.schema';\n\nclass MessagesService {\n async listMessages(\n params?: Partial<FindMessagesParams>\n ): Promise<ListMessagesApiResponse> {\n const { id_account, id_user } = await getUserContext();\n\n const query = buildQueryParams({\n id_account,\n id_user,\n type: 'notification',\n limit: 20,\n page: 1,\n order: 'desc',\n ...params,\n });\n\n const url = `/accounts/${id_account}/messages${query ? `?${query}` : ''}`;\n\n return api.apps.get<ListMessagesApiResponse>(url);\n }\n\n async markAsRead(messageId: string): Promise<MarkAsReadApiResponse> {\n const { id_account } = await getUserContext();\n\n const url = `/accounts/${id_account}/messages/${messageId}/action/markAsRead`;\n return api.apps.put<MarkAsReadApiResponse>(url);\n }\n\n async markAllAsRead(): Promise<MarkAllAsReadApiResponse> {\n const { id_account, id_user } = await getUserContext();\n\n const url = `/accounts/${id_account}/messages/action/markAllAsRead`;\n return api.apps.put<MarkAllAsReadApiResponse>(url, { id_user });\n }\n}\n\nexport const messagesService = new MessagesService();\n"],"mappings":"AAAA,OAAO;AAEP,SAAS,WAAW;AACpB,SAAS,wBAAwB;AACjC,SAAS,sBAAsB;AAQ/B,MAAM,gBAAgB;AAAA,EACpB,MAAM,aACJ,QACkC;AAClC,UAAM,EAAE,YAAY,QAAQ,IAAI,MAAM,eAAe;AAErD,UAAM,QAAQ,iBAAiB;AAAA,MAC7B;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,MACP,GAAG;AAAA,IACL,CAAC;AAED,UAAM,MAAM,aAAa,UAAU,YAAY,QAAQ,IAAI,KAAK,KAAK,EAAE;AAEvE,WAAO,IAAI,KAAK,IAA6B,GAAG;AAAA,EAClD;AAAA,EAEA,MAAM,WAAW,WAAmD;AAClE,UAAM,EAAE,WAAW,IAAI,MAAM,eAAe;AAE5C,UAAM,MAAM,aAAa,UAAU,aAAa,SAAS;AACzD,WAAO,IAAI,KAAK,IAA2B,GAAG;AAAA,EAChD;AAAA,EAEA,MAAM,gBAAmD;AACvD,UAAM,EAAE,YAAY,QAAQ,IAAI,MAAM,eAAe;AAErD,UAAM,MAAM,aAAa,UAAU;AACnC,WAAO,IAAI,KAAK,IAA8B,KAAK,EAAE,QAAQ,CAAC;AAAA,EAChE;AACF;AAEO,MAAM,kBAAkB,IAAI,gBAAgB;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/whitelabel/actions/find-whitelabel.action.ts"],"sourcesContent":["'use server';\r\n\r\n\r\nimport { headers } from \"next/headers\";\r\nimport { whitelabelService } from \"../services/whitelabel.service\";\r\nimport { ApiError } from \"../../../infra/api/types\";\r\nimport { cache } from \"react\";\r\n\r\nexport const findWhitelabel = cache(async () => {\r\n const headersList = await headers();\r\n const host = headersList.get('host');\r\n\r\n if (!host) {\r\n throw new ApiError('Host header not found', 'HOST_NOT_FOUND', 400);\r\n }\r\n\r\n const whitelabel = await whitelabelService.getTokenByDomain(host);\r\n\r\n if (!whitelabel) {\r\n throw new ApiError('Whitelabel not found', 'WL_NOT_FOUND', 404);\r\n }\r\n\r\n return whitelabel;\r\n});"],"mappings":";AAGA,SAAS,eAAe;AACxB,SAAS,yBAAyB;AAClC,SAAS,gBAAgB;AACzB,SAAS,aAAa;AAEf,MAAM,iBAAiB,MAAM,YAAY;AAC5C,QAAM,cAAc,MAAM,QAAQ;AAClC,QAAM,OAAO,YAAY,IAAI,MAAM;AAEnC,MAAI,CAAC,MAAM;AACP,UAAM,IAAI,SAAS,yBAAyB,kBAAkB,GAAG;AAAA,EACrE;AAEA,QAAM,aAAa,MAAM,kBAAkB,iBAAiB,IAAI;AAEhE,MAAI,CAAC,YAAY;AACb,UAAM,IAAI,SAAS,wBAAwB,gBAAgB,GAAG;AAAA,EAClE;AAEA,SAAO;AACX,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/whitelabel/actions/find-whitelabel.action.ts"],"sourcesContent":["'use server';\n\n\nimport { headers } from \"next/headers\";\nimport { whitelabelService } from \"../services/whitelabel.service\";\nimport { ApiError } from \"../../../infra/api/types\";\nimport { cache } from \"react\";\n\nexport const findWhitelabel = cache(async () => {\n const headersList = await headers();\n const host = headersList.get('host');\n\n if (!host) {\n throw new ApiError('Host header not found', 'HOST_NOT_FOUND', 400);\n }\n\n const whitelabel = await whitelabelService.getTokenByDomain(host);\n\n if (!whitelabel) {\n throw new ApiError('Whitelabel not found', 'WL_NOT_FOUND', 404);\n }\n\n return whitelabel;\n});"],"mappings":";AAGA,SAAS,eAAe;AACxB,SAAS,yBAAyB;AAClC,SAAS,gBAAgB;AACzB,SAAS,aAAa;AAEf,MAAM,iBAAiB,MAAM,YAAY;AAC5C,QAAM,cAAc,MAAM,QAAQ;AAClC,QAAM,OAAO,YAAY,IAAI,MAAM;AAEnC,MAAI,CAAC,MAAM;AACP,UAAM,IAAI,SAAS,yBAAyB,kBAAkB,GAAG;AAAA,EACrE;AAEA,QAAM,aAAa,MAAM,kBAAkB,iBAAiB,IAAI;AAEhE,MAAI,CAAC,YAAY;AACb,UAAM,IAAI,SAAS,wBAAwB,gBAAgB,GAAG;AAAA,EAClE;AAEA,SAAO;AACX,CAAC;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/whitelabel/actions/revalidate-whitelabel.action.ts"],"sourcesContent":["'use server';\r\n\r\nimport { headers } from 'next/headers';\r\nimport { whitelabelService } from '../services/whitelabel.service';\r\nimport { ApiError } from '../../../infra/api/types';\r\nimport { safeServerAction } from '../../../utils/safeServerAction';\r\n\r\nexport async function revalidateWhitelabelAction() {\r\n return safeServerAction(async () => {\r\n const headersList = await headers();\r\n const host = headersList.get('host');\r\n\r\n if (!host) {\r\n throw new ApiError('Host header not found', 'HOST_NOT_FOUND', 400);\r\n }\r\n\r\n return whitelabelService.revalidateByDomain(host);\r\n });\r\n}\r\n"],"mappings":";AAEA,SAAS,eAAe;AACxB,SAAS,yBAAyB;AAClC,SAAS,gBAAgB;AACzB,SAAS,wBAAwB;AAEjC,eAAsB,6BAA6B;AACjD,SAAO,iBAAiB,YAAY;AAClC,UAAM,cAAc,MAAM,QAAQ;AAClC,UAAM,OAAO,YAAY,IAAI,MAAM;AAEnC,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,SAAS,yBAAyB,kBAAkB,GAAG;AAAA,IACnE;AAEA,WAAO,kBAAkB,mBAAmB,IAAI;AAAA,EAClD,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/whitelabel/actions/revalidate-whitelabel.action.ts"],"sourcesContent":["'use server';\n\nimport { headers } from 'next/headers';\nimport { whitelabelService } from '../services/whitelabel.service';\nimport { ApiError } from '../../../infra/api/types';\nimport { safeServerAction } from '../../../utils/safeServerAction';\n\nexport async function revalidateWhitelabelAction() {\n return safeServerAction(async () => {\n const headersList = await headers();\n const host = headersList.get('host');\n\n if (!host) {\n throw new ApiError('Host header not found', 'HOST_NOT_FOUND', 400);\n }\n\n return whitelabelService.revalidateByDomain(host);\n });\n}\n"],"mappings":";AAEA,SAAS,eAAe;AACxB,SAAS,yBAAyB;AAClC,SAAS,gBAAgB;AACzB,SAAS,wBAAwB;AAEjC,eAAsB,6BAA6B;AACjD,SAAO,iBAAiB,YAAY;AAClC,UAAM,cAAc,MAAM,QAAQ;AAClC,UAAM,OAAO,YAAY,IAAI,MAAM;AAEnC,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,SAAS,yBAAyB,kBAAkB,GAAG;AAAA,IACnE;AAEA,WAAO,kBAAkB,mBAAmB,IAAI;AAAA,EAClD,CAAC;AACH;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/whitelabel/utils/normalize-hostname.ts"],"sourcesContent":["const CATEGORY_PREFIXES = new Set([\r\n \"com\", \"dev\", \"net\", \"org\", \"edu\", \"gov\",\r\n \"mil\", \"co\", \"art\", \"inf\", \"blog\", \"wiki\", \"app\", \"online\", \"site\"\r\n]);\r\n\r\nconst SIMPLE_TLDS = new Set([\"online\"]);\r\n\r\nexport function normalizeHostname(hostname: string): string {\r\n const parts = hostname.split(\".\");\r\n if (parts.length <= 2) return hostname;\r\n\r\n const last = parts[parts.length - 1];\r\n const secondLast = parts[parts.length - 2];\r\n\r\n const isCompoundTld =\r\n last.length <= 3 && CATEGORY_PREFIXES.has(secondLast);\r\n\r\n const rootParts = isCompoundTld ? 3 : 2;\r\n\r\n if (SIMPLE_TLDS.has(last) || !isCompoundTld) {\r\n return parts.slice(-2).join(\".\");\r\n }\r\n\r\n if (parts.length <= rootParts) return hostname;\r\n return parts.slice(-rootParts).join(\".\");\r\n}\r\n"],"mappings":"AAAA,MAAM,oBAAoB,oBAAI,IAAI;AAAA,EAChC;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACnC;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAU;AAC9D,CAAC;AAED,MAAM,cAAc,oBAAI,IAAI,CAAC,QAAQ,CAAC;AAE/B,SAAS,kBAAkB,UAA0B;AAC1D,QAAM,QAAQ,SAAS,MAAM,GAAG;AAChC,MAAI,MAAM,UAAU,EAAG,QAAO;AAE9B,QAAM,OAAO,MAAM,MAAM,SAAS,CAAC;AACnC,QAAM,aAAa,MAAM,MAAM,SAAS,CAAC;AAEzC,QAAM,gBACJ,KAAK,UAAU,KAAK,kBAAkB,IAAI,UAAU;AAEtD,QAAM,YAAY,gBAAgB,IAAI;AAEtC,MAAI,YAAY,IAAI,IAAI,KAAK,CAAC,eAAe;AAC3C,WAAO,MAAM,MAAM,EAAE,EAAE,KAAK,GAAG;AAAA,EACjC;AAEA,MAAI,MAAM,UAAU,UAAW,QAAO;AACtC,SAAO,MAAM,MAAM,CAAC,SAAS,EAAE,KAAK,GAAG;AACzC;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/whitelabel/utils/normalize-hostname.ts"],"sourcesContent":["const CATEGORY_PREFIXES = new Set([\n \"com\", \"dev\", \"net\", \"org\", \"edu\", \"gov\",\n \"mil\", \"co\", \"art\", \"inf\", \"blog\", \"wiki\", \"app\", \"online\", \"site\"\n]);\n\nconst SIMPLE_TLDS = new Set([\"online\"]);\n\nexport function normalizeHostname(hostname: string): string {\n const parts = hostname.split(\".\");\n if (parts.length <= 2) return hostname;\n\n const last = parts[parts.length - 1];\n const secondLast = parts[parts.length - 2];\n\n const isCompoundTld =\n last.length <= 3 && CATEGORY_PREFIXES.has(secondLast);\n\n const rootParts = isCompoundTld ? 3 : 2;\n\n if (SIMPLE_TLDS.has(last) || !isCompoundTld) {\n return parts.slice(-2).join(\".\");\n }\n\n if (parts.length <= rootParts) return hostname;\n return parts.slice(-rootParts).join(\".\");\n}\n"],"mappings":"AAAA,MAAM,oBAAoB,oBAAI,IAAI;AAAA,EAChC;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACnC;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAU;AAC9D,CAAC;AAED,MAAM,cAAc,oBAAI,IAAI,CAAC,QAAQ,CAAC;AAE/B,SAAS,kBAAkB,UAA0B;AAC1D,QAAM,QAAQ,SAAS,MAAM,GAAG;AAChC,MAAI,MAAM,UAAU,EAAG,QAAO;AAE9B,QAAM,OAAO,MAAM,MAAM,SAAS,CAAC;AACnC,QAAM,aAAa,MAAM,MAAM,SAAS,CAAC;AAEzC,QAAM,gBACJ,KAAK,UAAU,KAAK,kBAAkB,IAAI,UAAU;AAEtD,QAAM,YAAY,gBAAgB,IAAI;AAEtC,MAAI,YAAY,IAAI,IAAI,KAAK,CAAC,eAAe;AAC3C,WAAO,MAAM,MAAM,EAAE,EAAE,KAAK,GAAG;AAAA,EACjC;AAEA,MAAI,MAAM,UAAU,UAAW,QAAO;AACtC,SAAO,MAAM,MAAM,CAAC,SAAS,EAAE,KAAK,GAAG;AACzC;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/providers/auth.provider.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {\r\n createContext,\r\n ReactNode,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n} from \"react\";\r\nimport { useQueryClient } from \"@tanstack/react-query\";\r\nimport {\r\n useUserQuery,\r\n useSetUserData,\r\n useUserValidateSession,\r\n} from \"../modules/auth/hooks/useUserQuery\";\r\nimport { useLogin } from \"../modules/auth/hooks/login.hook\";\r\nimport { useRegister } from \"../modules/auth/hooks/register.hook\";\r\nimport { useLogout } from \"../modules/auth/hooks/logout.hook\";\r\nimport { useSocialGoogleLogin } from \"../modules/auth/hooks/social-google-login.hook\";\r\nimport { useSocialGoogleOnboarding } from \"../modules/auth/hooks/social-google-onboarding.hook\";\r\nimport {\r\n AuthState,\r\n LoginRequest,\r\n RegisterRequest,\r\n SocialGooglePartial,\r\n SocialOnboardingRequest,\r\n} from \"../modules/auth/schema\";\r\n\r\nexport type LoginResult =\r\n | { result: \"success\" }\r\n | { result: \"two_factor_required\"; cookie: string; twoFactorMode: \"verify\" | \"setup\" }\r\n | { result: \"error\"; message: string };\r\n\r\nexport type GoogleLoginResult =\r\n | { result: \"success\" }\r\n | { result: \"two_factor_required\"; cookie: string; twoFactorMode: \"verify\" | \"setup\" }\r\n | { result: \"needs_onboarding\"; onboardingToken: string; partial: SocialGooglePartial }\r\n | { result: \"link_requires_password\"; message: string }\r\n | { result: \"error\"; message: string };\r\nimport {\r\n useCurrentAccount,\r\n ACCOUNT_QUERY_KEY,\r\n} from \"../modules/accounts/hooks/current-account.hook\";\r\nimport { useWhitelabelUrls, useWhitelabel } from \"./whitelabel.provider\";\r\nimport { useWlQueryKey } from \"../hooks/useAuthQueryKey\";\r\nimport { normalizeLocale } from \"../i18n/normalize\";\r\nimport { setLocaleCookie } from \"../utils/intl/locale-cookie\";\r\n\r\ninterface AuthContextProps extends AuthState {\r\n login: (credentials: LoginRequest) => Promise<LoginResult>;\r\n register: (data: RegisterRequest) => Promise<void>;\r\n logout: () => Promise<void>;\r\n loginWithGoogle: (code: string) => Promise<GoogleLoginResult>;\r\n completeGoogleOnboarding: (data: SocialOnboardingRequest) => Promise<void>;\r\n}\r\n\r\nexport const AuthContext = createContext<AuthContextProps | undefined>(\r\n undefined,\r\n);\r\n\r\ninterface AuthProviderProps {\r\n children: ReactNode;\r\n /**\r\n * Rotas públicas (sources de RegExp) que NÃO devem redirecionar para o login mesmo\r\n * sem sessão. Informadas pelo consumer app — a lib não conhece rotas específicas.\r\n */\r\n publicRoutes?: string[];\r\n}\r\n\r\nexport function AuthProvider({ children, publicRoutes = [] }: AuthProviderProps) {\r\n const { data: user, isLoading: isQueryLoading } = useUserQuery();\r\n const { data: account, isLoading: isAccountLoading } = useCurrentAccount();\r\n const { isLoading: isSessionLoading } = useUserValidateSession(publicRoutes);\r\n\r\n const queryClient = useQueryClient();\r\n const setUserData = useSetUserData();\r\n const { accountsUrl, pagesUrl } = useWhitelabelUrls();\r\n const { whitelabel } = useWhitelabel();\r\n const accountKey = useWlQueryKey([...ACCOUNT_QUERY_KEY]);\r\n\r\n // Mantém o cookie NEXT_LOCALE alinhado à preferência da conta (login, sessão existente,\r\n // atualização). Compartilhado entre subdomínios via domínio do whitelabel. A próxima\r\n // navegação/requisição passa a resolver o locale pela preferência do usuário.\r\n useEffect(() => {\r\n const locale = normalizeLocale(user?.language);\r\n if (locale) setLocaleCookie(locale, whitelabel?.domain);\r\n }, [user?.language, whitelabel?.domain]);\r\n\r\n const { mutateAsync: loginMutate, isPending: isLogging } = useLogin();\r\n const { mutateAsync: registerMutate, isPending: isRegistering } =\r\n useRegister();\r\n const { mutateAsync: logoutMutate, isPending: isLoggingOut } = useLogout();\r\n const { mutateAsync: googleLoginMutate, isPending: isGoogleLogging } =\r\n useSocialGoogleLogin();\r\n const { mutateAsync: googleOnboardingMutate, isPending: isGoogleOnboarding } =\r\n useSocialGoogleOnboarding();\r\n\r\n const isAuthenticated = !!user;\r\n const isLoading =\r\n isLogging ||\r\n isRegistering ||\r\n isLoggingOut ||\r\n isGoogleLogging ||\r\n isGoogleOnboarding ||\r\n isQueryLoading ||\r\n isAccountLoading ||\r\n isSessionLoading;\r\n\r\n const login = useCallback(\r\n async (credentials: LoginRequest): Promise<LoginResult> => {\r\n try {\r\n const data = await loginMutate(credentials);\r\n\r\n if (data.result === \"two_factor_required\") {\r\n return { result: \"two_factor_required\", cookie: data.cookie, twoFactorMode: data.twoFactorMode };\r\n }\r\n\r\n queryClient.clear();\r\n setUserData(data.user);\r\n queryClient.setQueryData(accountKey, data.account);\r\n\r\n return { result: \"success\" };\r\n } catch (error) {\r\n const message =\r\n error instanceof Error\r\n ? error.message\r\n : \"Ocorreu um erro ao fazer login. Tente novamente.\";\r\n return { result: \"error\", message };\r\n }\r\n },\r\n [queryClient, setUserData, accountKey],\r\n );\r\n\r\n const register = useCallback(\r\n async (data: RegisterRequest): Promise<void> => {\r\n await registerMutate(data, {\r\n onSuccess: (data) => {\r\n queryClient.clear();\r\n setUserData(data.user);\r\n queryClient.setQueryData(accountKey, data.account);\r\n },\r\n });\r\n },\r\n [queryClient, setUserData, accountKey],\r\n );\r\n\r\n const loginWithGoogle = useCallback(\r\n async (code: string): Promise<GoogleLoginResult> => {\r\n try {\r\n const data = await googleLoginMutate(code);\r\n\r\n if (data.result === \"two_factor_required\") {\r\n return {\r\n result: \"two_factor_required\",\r\n cookie: data.cookie,\r\n twoFactorMode: data.twoFactorMode,\r\n };\r\n }\r\n\r\n if (data.result === \"needs_onboarding\") {\r\n return {\r\n result: \"needs_onboarding\",\r\n onboardingToken: data.onboardingToken,\r\n partial: data.partial,\r\n };\r\n }\r\n\r\n if (data.result === \"link_requires_password\") {\r\n return { result: \"link_requires_password\", message: data.message };\r\n }\r\n\r\n queryClient.clear();\r\n setUserData(data.user);\r\n queryClient.setQueryData(accountKey, data.account);\r\n\r\n return { result: \"success\" };\r\n } catch (error) {\r\n const message =\r\n error instanceof Error\r\n ? error.message\r\n : \"Ocorreu um erro ao fazer login com Google. Tente novamente.\";\r\n return { result: \"error\", message };\r\n }\r\n },\r\n [googleLoginMutate, queryClient, setUserData, accountKey],\r\n );\r\n\r\n const completeGoogleOnboarding = useCallback(\r\n async (data: SocialOnboardingRequest): Promise<void> => {\r\n await googleOnboardingMutate(data, {\r\n onSuccess: (data) => {\r\n queryClient.clear();\r\n setUserData(data.user);\r\n queryClient.setQueryData(accountKey, data.account);\r\n },\r\n });\r\n },\r\n [googleOnboardingMutate, queryClient, setUserData, accountKey],\r\n );\r\n\r\n const resolveLogoutRedirect = useCallback(() => {\r\n try {\r\n const currentOrigin = window.location.origin;\r\n const pagesOrigin = pagesUrl ? new URL(pagesUrl).origin : \"\";\r\n\r\n if (pagesOrigin && currentOrigin === pagesOrigin) {\r\n return `${accountsUrl}/login?redirect=${encodeURIComponent(pagesUrl)}`;\r\n }\r\n } catch {\r\n // fallback below\r\n }\r\n\r\n return `${accountsUrl}/login?redirect=${encodeURIComponent(pagesUrl || \"/\")}`;\r\n }, [accountsUrl, pagesUrl]);\r\n\r\n const logout = useCallback(async (): Promise<void> => {\r\n try {\r\n await logoutMutate(undefined);\r\n } catch {\r\n // cookie já removido no servidor mesmo se a API falhou\r\n } finally {\r\n queryClient.clear();\r\n window.location.assign(resolveLogoutRedirect());\r\n }\r\n }, [queryClient, logoutMutate, resolveLogoutRedirect]);\r\n\r\n const value: AuthContextProps = useMemo(\r\n () => ({\r\n user: user ?? null,\r\n account: account ?? null,\r\n isAuthenticated,\r\n isLoading,\r\n login,\r\n register,\r\n logout,\r\n loginWithGoogle,\r\n completeGoogleOnboarding,\r\n }),\r\n [\r\n user,\r\n account,\r\n isAuthenticated,\r\n isLoading,\r\n login,\r\n register,\r\n logout,\r\n loginWithGoogle,\r\n completeGoogleOnboarding,\r\n ],\r\n );\r\n\r\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\r\n}\r\n\r\nexport function useAuth(): AuthContextProps {\r\n const context = useContext(AuthContext);\r\n\r\n if (context === undefined) {\r\n throw new Error(\"useAuth deve ser usado dentro de um AuthProvider\");\r\n }\r\n\r\n return context;\r\n}\r\n"],"mappings":"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","names":["data"]}
1
+ {"version":3,"sources":["../../src/providers/auth.provider.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n} from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport {\n useUserQuery,\n useSetUserData,\n useUserValidateSession,\n} from \"../modules/auth/hooks/useUserQuery\";\nimport { useLogin } from \"../modules/auth/hooks/login.hook\";\nimport { useRegister } from \"../modules/auth/hooks/register.hook\";\nimport { useLogout } from \"../modules/auth/hooks/logout.hook\";\nimport { useSocialGoogleLogin } from \"../modules/auth/hooks/social-google-login.hook\";\nimport { useSocialGoogleOnboarding } from \"../modules/auth/hooks/social-google-onboarding.hook\";\nimport {\n AuthState,\n LoginRequest,\n RegisterRequest,\n SocialGooglePartial,\n SocialOnboardingRequest,\n} from \"../modules/auth/schema\";\n\nexport type LoginResult =\n | { result: \"success\" }\n | { result: \"two_factor_required\"; cookie: string; twoFactorMode: \"verify\" | \"setup\" }\n | { result: \"error\"; message: string };\n\nexport type GoogleLoginResult =\n | { result: \"success\" }\n | { result: \"two_factor_required\"; cookie: string; twoFactorMode: \"verify\" | \"setup\" }\n | { result: \"needs_onboarding\"; onboardingToken: string; partial: SocialGooglePartial }\n | { result: \"link_requires_password\"; message: string }\n | { result: \"error\"; message: string };\nimport {\n useCurrentAccount,\n ACCOUNT_QUERY_KEY,\n} from \"../modules/accounts/hooks/current-account.hook\";\nimport { useWhitelabelUrls, useWhitelabel } from \"./whitelabel.provider\";\nimport { useWlQueryKey } from \"../hooks/useAuthQueryKey\";\nimport { normalizeLocale } from \"../i18n/normalize\";\nimport { setLocaleCookie } from \"../utils/intl/locale-cookie\";\n\ninterface AuthContextProps extends AuthState {\n login: (credentials: LoginRequest) => Promise<LoginResult>;\n register: (data: RegisterRequest) => Promise<void>;\n logout: () => Promise<void>;\n loginWithGoogle: (code: string) => Promise<GoogleLoginResult>;\n completeGoogleOnboarding: (data: SocialOnboardingRequest) => Promise<void>;\n}\n\nexport const AuthContext = createContext<AuthContextProps | undefined>(\n undefined,\n);\n\ninterface AuthProviderProps {\n children: ReactNode;\n /**\n * Rotas públicas (sources de RegExp) que NÃO devem redirecionar para o login mesmo\n * sem sessão. Informadas pelo consumer app — a lib não conhece rotas específicas.\n */\n publicRoutes?: string[];\n}\n\nexport function AuthProvider({ children, publicRoutes = [] }: AuthProviderProps) {\n const { data: user, isLoading: isQueryLoading } = useUserQuery();\n const { data: account, isLoading: isAccountLoading } = useCurrentAccount();\n const { isLoading: isSessionLoading } = useUserValidateSession(publicRoutes);\n\n const queryClient = useQueryClient();\n const setUserData = useSetUserData();\n const { accountsUrl, pagesUrl } = useWhitelabelUrls();\n const { whitelabel } = useWhitelabel();\n const accountKey = useWlQueryKey([...ACCOUNT_QUERY_KEY]);\n\n // Mantém o cookie NEXT_LOCALE alinhado à preferência da conta (login, sessão existente,\n // atualização). Compartilhado entre subdomínios via domínio do whitelabel. A próxima\n // navegação/requisição passa a resolver o locale pela preferência do usuário.\n useEffect(() => {\n const locale = normalizeLocale(user?.language);\n if (locale) setLocaleCookie(locale, whitelabel?.domain);\n }, [user?.language, whitelabel?.domain]);\n\n const { mutateAsync: loginMutate, isPending: isLogging } = useLogin();\n const { mutateAsync: registerMutate, isPending: isRegistering } =\n useRegister();\n const { mutateAsync: logoutMutate, isPending: isLoggingOut } = useLogout();\n const { mutateAsync: googleLoginMutate, isPending: isGoogleLogging } =\n useSocialGoogleLogin();\n const { mutateAsync: googleOnboardingMutate, isPending: isGoogleOnboarding } =\n useSocialGoogleOnboarding();\n\n const isAuthenticated = !!user;\n const isLoading =\n isLogging ||\n isRegistering ||\n isLoggingOut ||\n isGoogleLogging ||\n isGoogleOnboarding ||\n isQueryLoading ||\n isAccountLoading ||\n isSessionLoading;\n\n const login = useCallback(\n async (credentials: LoginRequest): Promise<LoginResult> => {\n try {\n const data = await loginMutate(credentials);\n\n if (data.result === \"two_factor_required\") {\n return { result: \"two_factor_required\", cookie: data.cookie, twoFactorMode: data.twoFactorMode };\n }\n\n queryClient.clear();\n setUserData(data.user);\n queryClient.setQueryData(accountKey, data.account);\n\n return { result: \"success\" };\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : \"Ocorreu um erro ao fazer login. Tente novamente.\";\n return { result: \"error\", message };\n }\n },\n [queryClient, setUserData, accountKey],\n );\n\n const register = useCallback(\n async (data: RegisterRequest): Promise<void> => {\n await registerMutate(data, {\n onSuccess: (data) => {\n queryClient.clear();\n setUserData(data.user);\n queryClient.setQueryData(accountKey, data.account);\n },\n });\n },\n [queryClient, setUserData, accountKey],\n );\n\n const loginWithGoogle = useCallback(\n async (code: string): Promise<GoogleLoginResult> => {\n try {\n const data = await googleLoginMutate(code);\n\n if (data.result === \"two_factor_required\") {\n return {\n result: \"two_factor_required\",\n cookie: data.cookie,\n twoFactorMode: data.twoFactorMode,\n };\n }\n\n if (data.result === \"needs_onboarding\") {\n return {\n result: \"needs_onboarding\",\n onboardingToken: data.onboardingToken,\n partial: data.partial,\n };\n }\n\n if (data.result === \"link_requires_password\") {\n return { result: \"link_requires_password\", message: data.message };\n }\n\n queryClient.clear();\n setUserData(data.user);\n queryClient.setQueryData(accountKey, data.account);\n\n return { result: \"success\" };\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : \"Ocorreu um erro ao fazer login com Google. Tente novamente.\";\n return { result: \"error\", message };\n }\n },\n [googleLoginMutate, queryClient, setUserData, accountKey],\n );\n\n const completeGoogleOnboarding = useCallback(\n async (data: SocialOnboardingRequest): Promise<void> => {\n await googleOnboardingMutate(data, {\n onSuccess: (data) => {\n queryClient.clear();\n setUserData(data.user);\n queryClient.setQueryData(accountKey, data.account);\n },\n });\n },\n [googleOnboardingMutate, queryClient, setUserData, accountKey],\n );\n\n const resolveLogoutRedirect = useCallback(() => {\n try {\n const currentOrigin = window.location.origin;\n const pagesOrigin = pagesUrl ? new URL(pagesUrl).origin : \"\";\n\n if (pagesOrigin && currentOrigin === pagesOrigin) {\n return `${accountsUrl}/login?redirect=${encodeURIComponent(pagesUrl)}`;\n }\n } catch {\n // fallback below\n }\n\n return `${accountsUrl}/login?redirect=${encodeURIComponent(pagesUrl || \"/\")}`;\n }, [accountsUrl, pagesUrl]);\n\n const logout = useCallback(async (): Promise<void> => {\n try {\n await logoutMutate(undefined);\n } catch {\n // cookie já removido no servidor mesmo se a API falhou\n } finally {\n queryClient.clear();\n window.location.assign(resolveLogoutRedirect());\n }\n }, [queryClient, logoutMutate, resolveLogoutRedirect]);\n\n const value: AuthContextProps = useMemo(\n () => ({\n user: user ?? null,\n account: account ?? null,\n isAuthenticated,\n isLoading,\n login,\n register,\n logout,\n loginWithGoogle,\n completeGoogleOnboarding,\n }),\n [\n user,\n account,\n isAuthenticated,\n isLoading,\n login,\n register,\n logout,\n loginWithGoogle,\n completeGoogleOnboarding,\n ],\n );\n\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n}\n\nexport function useAuth(): AuthContextProps {\n const context = useContext(AuthContext);\n\n if (context === undefined) {\n throw new Error(\"useAuth deve ser usado dentro de um AuthProvider\");\n }\n\n return context;\n}\n"],"mappings":";AA4PS;AA1PT;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB;AAC/B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,gBAAgB;AACzB,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB;AAC1B,SAAS,4BAA4B;AACrC,SAAS,iCAAiC;AAoB1C;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,mBAAmB,qBAAqB;AACjD,SAAS,qBAAqB;AAC9B,SAAS,uBAAuB;AAChC,SAAS,uBAAuB;AAUzB,MAAM,cAAc;AAAA,EACzB;AACF;AAWO,SAAS,aAAa,EAAE,UAAU,eAAe,CAAC,EAAE,GAAsB;AAC/E,QAAM,EAAE,MAAM,MAAM,WAAW,eAAe,IAAI,aAAa;AAC/D,QAAM,EAAE,MAAM,SAAS,WAAW,iBAAiB,IAAI,kBAAkB;AACzE,QAAM,EAAE,WAAW,iBAAiB,IAAI,uBAAuB,YAAY;AAE3E,QAAM,cAAc,eAAe;AACnC,QAAM,cAAc,eAAe;AACnC,QAAM,EAAE,aAAa,SAAS,IAAI,kBAAkB;AACpD,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,QAAM,aAAa,cAAc,CAAC,GAAG,iBAAiB,CAAC;AAKvD,YAAU,MAAM;AACd,UAAM,SAAS,gBAAgB,MAAM,QAAQ;AAC7C,QAAI,OAAQ,iBAAgB,QAAQ,YAAY,MAAM;AAAA,EACxD,GAAG,CAAC,MAAM,UAAU,YAAY,MAAM,CAAC;AAEvC,QAAM,EAAE,aAAa,aAAa,WAAW,UAAU,IAAI,SAAS;AACpE,QAAM,EAAE,aAAa,gBAAgB,WAAW,cAAc,IAC5D,YAAY;AACd,QAAM,EAAE,aAAa,cAAc,WAAW,aAAa,IAAI,UAAU;AACzE,QAAM,EAAE,aAAa,mBAAmB,WAAW,gBAAgB,IACjE,qBAAqB;AACvB,QAAM,EAAE,aAAa,wBAAwB,WAAW,mBAAmB,IACzE,0BAA0B;AAE5B,QAAM,kBAAkB,CAAC,CAAC;AAC1B,QAAM,YACJ,aACA,iBACA,gBACA,mBACA,sBACA,kBACA,oBACA;AAEF,QAAM,QAAQ;AAAA,IACZ,OAAO,gBAAoD;AACzD,UAAI;AACF,cAAM,OAAO,MAAM,YAAY,WAAW;AAE1C,YAAI,KAAK,WAAW,uBAAuB;AACzC,iBAAO,EAAE,QAAQ,uBAAuB,QAAQ,KAAK,QAAQ,eAAe,KAAK,cAAc;AAAA,QACjG;AAEA,oBAAY,MAAM;AAClB,oBAAY,KAAK,IAAI;AACrB,oBAAY,aAAa,YAAY,KAAK,OAAO;AAEjD,eAAO,EAAE,QAAQ,UAAU;AAAA,MAC7B,SAAS,OAAO;AACd,cAAM,UACJ,iBAAiB,QACb,MAAM,UACN;AACN,eAAO,EAAE,QAAQ,SAAS,QAAQ;AAAA,MACpC;AAAA,IACF;AAAA,IACA,CAAC,aAAa,aAAa,UAAU;AAAA,EACvC;AAEA,QAAM,WAAW;AAAA,IACf,OAAO,SAAyC;AAC9C,YAAM,eAAe,MAAM;AAAA,QACzB,WAAW,CAACA,UAAS;AACnB,sBAAY,MAAM;AAClB,sBAAYA,MAAK,IAAI;AACrB,sBAAY,aAAa,YAAYA,MAAK,OAAO;AAAA,QACnD;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,CAAC,aAAa,aAAa,UAAU;AAAA,EACvC;AAEA,QAAM,kBAAkB;AAAA,IACtB,OAAO,SAA6C;AAClD,UAAI;AACF,cAAM,OAAO,MAAM,kBAAkB,IAAI;AAEzC,YAAI,KAAK,WAAW,uBAAuB;AACzC,iBAAO;AAAA,YACL,QAAQ;AAAA,YACR,QAAQ,KAAK;AAAA,YACb,eAAe,KAAK;AAAA,UACtB;AAAA,QACF;AAEA,YAAI,KAAK,WAAW,oBAAoB;AACtC,iBAAO;AAAA,YACL,QAAQ;AAAA,YACR,iBAAiB,KAAK;AAAA,YACtB,SAAS,KAAK;AAAA,UAChB;AAAA,QACF;AAEA,YAAI,KAAK,WAAW,0BAA0B;AAC5C,iBAAO,EAAE,QAAQ,0BAA0B,SAAS,KAAK,QAAQ;AAAA,QACnE;AAEA,oBAAY,MAAM;AAClB,oBAAY,KAAK,IAAI;AACrB,oBAAY,aAAa,YAAY,KAAK,OAAO;AAEjD,eAAO,EAAE,QAAQ,UAAU;AAAA,MAC7B,SAAS,OAAO;AACd,cAAM,UACJ,iBAAiB,QACb,MAAM,UACN;AACN,eAAO,EAAE,QAAQ,SAAS,QAAQ;AAAA,MACpC;AAAA,IACF;AAAA,IACA,CAAC,mBAAmB,aAAa,aAAa,UAAU;AAAA,EAC1D;AAEA,QAAM,2BAA2B;AAAA,IAC/B,OAAO,SAAiD;AACtD,YAAM,uBAAuB,MAAM;AAAA,QACjC,WAAW,CAACA,UAAS;AACnB,sBAAY,MAAM;AAClB,sBAAYA,MAAK,IAAI;AACrB,sBAAY,aAAa,YAAYA,MAAK,OAAO;AAAA,QACnD;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,CAAC,wBAAwB,aAAa,aAAa,UAAU;AAAA,EAC/D;AAEA,QAAM,wBAAwB,YAAY,MAAM;AAC9C,QAAI;AACF,YAAM,gBAAgB,OAAO,SAAS;AACtC,YAAM,cAAc,WAAW,IAAI,IAAI,QAAQ,EAAE,SAAS;AAE1D,UAAI,eAAe,kBAAkB,aAAa;AAChD,eAAO,GAAG,WAAW,mBAAmB,mBAAmB,QAAQ,CAAC;AAAA,MACtE;AAAA,IACF,QAAQ;AAAA,IAER;AAEA,WAAO,GAAG,WAAW,mBAAmB,mBAAmB,YAAY,GAAG,CAAC;AAAA,EAC7E,GAAG,CAAC,aAAa,QAAQ,CAAC;AAE1B,QAAM,SAAS,YAAY,YAA2B;AACpD,QAAI;AACF,YAAM,aAAa,MAAS;AAAA,IAC9B,QAAQ;AAAA,IAER,UAAE;AACA,kBAAY,MAAM;AAClB,aAAO,SAAS,OAAO,sBAAsB,CAAC;AAAA,IAChD;AAAA,EACF,GAAG,CAAC,aAAa,cAAc,qBAAqB,CAAC;AAErD,QAAM,QAA0B;AAAA,IAC9B,OAAO;AAAA,MACL,MAAM,QAAQ;AAAA,MACd,SAAS,WAAW;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO,oBAAC,YAAY,UAAZ,EAAqB,OAAe,UAAS;AACvD;AAEO,SAAS,UAA4B;AAC1C,QAAM,UAAU,WAAW,WAAW;AAEtC,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AAEA,SAAO;AACT;","names":["data"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/providers/navigation.provider.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {\r\n createContext,\r\n ReactNode,\r\n useContext,\r\n useEffect,\r\n useRef,\r\n type RefObject,\r\n} from \"react\";\r\nimport { usePathname, useSearchParams } from \"next/navigation\";\r\n\r\ninterface NavigationContextValue {\r\n defaultFallback: string;\r\n internalNavCountRef: RefObject<number>;\r\n}\r\n\r\nconst NavigationContext = createContext<NavigationContextValue | null>(null);\r\n\r\nfunction seedCountFromReferrer(): number {\r\n if (typeof window === \"undefined\") return 0;\r\n if (window.history.length <= 1) return 0;\r\n try {\r\n if (!document.referrer) return 0;\r\n if (new URL(document.referrer).origin === window.location.origin) {\r\n return 1;\r\n }\r\n } catch {\r\n // ignore\r\n }\r\n return 0;\r\n}\r\n\r\ninterface NavigationProviderProps {\r\n children: ReactNode;\r\n defaultFallback?: string;\r\n}\r\n\r\nexport function NavigationProvider({\r\n children,\r\n defaultFallback = \"/\",\r\n}: NavigationProviderProps) {\r\n const pathname = usePathname();\r\n const searchParams = useSearchParams();\r\n const currentKey = `${pathname}?${searchParams?.toString() ?? \"\"}`;\r\n\r\n const internalNavCountRef = useRef(seedCountFromReferrer());\r\n const lastKeyRef = useRef<string | null>(null);\r\n const popStateFiredRef = useRef(false);\r\n\r\n useEffect(() => {\r\n const onPopState = () => {\r\n popStateFiredRef.current = true;\r\n };\r\n window.addEventListener(\"popstate\", onPopState);\r\n return () => window.removeEventListener(\"popstate\", onPopState);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (lastKeyRef.current === null) {\r\n lastKeyRef.current = currentKey;\r\n return;\r\n }\r\n if (lastKeyRef.current === currentKey) return;\r\n\r\n if (popStateFiredRef.current) {\r\n popStateFiredRef.current = false;\r\n internalNavCountRef.current = Math.max(\r\n 0,\r\n internalNavCountRef.current - 1\r\n );\r\n } else {\r\n internalNavCountRef.current += 1;\r\n }\r\n lastKeyRef.current = currentKey;\r\n }, [currentKey]);\r\n\r\n return (\r\n <NavigationContext.Provider\r\n value={{ defaultFallback, internalNavCountRef }}\r\n >\r\n {children}\r\n </NavigationContext.Provider>\r\n );\r\n}\r\n\r\nexport function useNavigationContext(): NavigationContextValue {\r\n const ctx = useContext(NavigationContext);\r\n if (!ctx) {\r\n throw new Error(\r\n \"useNavigationContext must be used inside <NavigationProvider>\"\r\n );\r\n }\r\n return ctx;\r\n}\r\n\r\nexport function useNavigationFallback(): string {\r\n return useNavigationContext().defaultFallback;\r\n}\r\n"],"mappings":";AA8EI;AA5EJ;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,aAAa,uBAAuB;AAO7C,MAAM,oBAAoB,cAA6C,IAAI;AAE3E,SAAS,wBAAgC;AACvC,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,MAAI,OAAO,QAAQ,UAAU,EAAG,QAAO;AACvC,MAAI;AACF,QAAI,CAAC,SAAS,SAAU,QAAO;AAC/B,QAAI,IAAI,IAAI,SAAS,QAAQ,EAAE,WAAW,OAAO,SAAS,QAAQ;AAChE,aAAO;AAAA,IACT;AAAA,EACF,QAAQ;AAAA,EAER;AACA,SAAO;AACT;AAOO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA,kBAAkB;AACpB,GAA4B;AAC1B,QAAM,WAAW,YAAY;AAC7B,QAAM,eAAe,gBAAgB;AACrC,QAAM,aAAa,GAAG,QAAQ,IAAI,cAAc,SAAS,KAAK,EAAE;AAEhE,QAAM,sBAAsB,OAAO,sBAAsB,CAAC;AAC1D,QAAM,aAAa,OAAsB,IAAI;AAC7C,QAAM,mBAAmB,OAAO,KAAK;AAErC,YAAU,MAAM;AACd,UAAM,aAAa,MAAM;AACvB,uBAAiB,UAAU;AAAA,IAC7B;AACA,WAAO,iBAAiB,YAAY,UAAU;AAC9C,WAAO,MAAM,OAAO,oBAAoB,YAAY,UAAU;AAAA,EAChE,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,QAAI,WAAW,YAAY,MAAM;AAC/B,iBAAW,UAAU;AACrB;AAAA,IACF;AACA,QAAI,WAAW,YAAY,WAAY;AAEvC,QAAI,iBAAiB,SAAS;AAC5B,uBAAiB,UAAU;AAC3B,0BAAoB,UAAU,KAAK;AAAA,QACjC;AAAA,QACA,oBAAoB,UAAU;AAAA,MAChC;AAAA,IACF,OAAO;AACL,0BAAoB,WAAW;AAAA,IACjC;AACA,eAAW,UAAU;AAAA,EACvB,GAAG,CAAC,UAAU,CAAC;AAEf,SACE;AAAA,IAAC,kBAAkB;AAAA,IAAlB;AAAA,MACC,OAAO,EAAE,iBAAiB,oBAAoB;AAAA,MAE7C;AAAA;AAAA,EACH;AAEJ;AAEO,SAAS,uBAA+C;AAC7D,QAAM,MAAM,WAAW,iBAAiB;AACxC,MAAI,CAAC,KAAK;AACR,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,wBAAgC;AAC9C,SAAO,qBAAqB,EAAE;AAChC;","names":[]}
1
+ {"version":3,"sources":["../../src/providers/navigation.provider.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n ReactNode,\n useContext,\n useEffect,\n useRef,\n type RefObject,\n} from \"react\";\nimport { usePathname, useSearchParams } from \"next/navigation\";\n\ninterface NavigationContextValue {\n defaultFallback: string;\n internalNavCountRef: RefObject<number>;\n}\n\nconst NavigationContext = createContext<NavigationContextValue | null>(null);\n\nfunction seedCountFromReferrer(): number {\n if (typeof window === \"undefined\") return 0;\n if (window.history.length <= 1) return 0;\n try {\n if (!document.referrer) return 0;\n if (new URL(document.referrer).origin === window.location.origin) {\n return 1;\n }\n } catch {\n // ignore\n }\n return 0;\n}\n\ninterface NavigationProviderProps {\n children: ReactNode;\n defaultFallback?: string;\n}\n\nexport function NavigationProvider({\n children,\n defaultFallback = \"/\",\n}: NavigationProviderProps) {\n const pathname = usePathname();\n const searchParams = useSearchParams();\n const currentKey = `${pathname}?${searchParams?.toString() ?? \"\"}`;\n\n const internalNavCountRef = useRef(seedCountFromReferrer());\n const lastKeyRef = useRef<string | null>(null);\n const popStateFiredRef = useRef(false);\n\n useEffect(() => {\n const onPopState = () => {\n popStateFiredRef.current = true;\n };\n window.addEventListener(\"popstate\", onPopState);\n return () => window.removeEventListener(\"popstate\", onPopState);\n }, []);\n\n useEffect(() => {\n if (lastKeyRef.current === null) {\n lastKeyRef.current = currentKey;\n return;\n }\n if (lastKeyRef.current === currentKey) return;\n\n if (popStateFiredRef.current) {\n popStateFiredRef.current = false;\n internalNavCountRef.current = Math.max(\n 0,\n internalNavCountRef.current - 1\n );\n } else {\n internalNavCountRef.current += 1;\n }\n lastKeyRef.current = currentKey;\n }, [currentKey]);\n\n return (\n <NavigationContext.Provider\n value={{ defaultFallback, internalNavCountRef }}\n >\n {children}\n </NavigationContext.Provider>\n );\n}\n\nexport function useNavigationContext(): NavigationContextValue {\n const ctx = useContext(NavigationContext);\n if (!ctx) {\n throw new Error(\n \"useNavigationContext must be used inside <NavigationProvider>\"\n );\n }\n return ctx;\n}\n\nexport function useNavigationFallback(): string {\n return useNavigationContext().defaultFallback;\n}\n"],"mappings":";AA8EI;AA5EJ;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,aAAa,uBAAuB;AAO7C,MAAM,oBAAoB,cAA6C,IAAI;AAE3E,SAAS,wBAAgC;AACvC,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,MAAI,OAAO,QAAQ,UAAU,EAAG,QAAO;AACvC,MAAI;AACF,QAAI,CAAC,SAAS,SAAU,QAAO;AAC/B,QAAI,IAAI,IAAI,SAAS,QAAQ,EAAE,WAAW,OAAO,SAAS,QAAQ;AAChE,aAAO;AAAA,IACT;AAAA,EACF,QAAQ;AAAA,EAER;AACA,SAAO;AACT;AAOO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA,kBAAkB;AACpB,GAA4B;AAC1B,QAAM,WAAW,YAAY;AAC7B,QAAM,eAAe,gBAAgB;AACrC,QAAM,aAAa,GAAG,QAAQ,IAAI,cAAc,SAAS,KAAK,EAAE;AAEhE,QAAM,sBAAsB,OAAO,sBAAsB,CAAC;AAC1D,QAAM,aAAa,OAAsB,IAAI;AAC7C,QAAM,mBAAmB,OAAO,KAAK;AAErC,YAAU,MAAM;AACd,UAAM,aAAa,MAAM;AACvB,uBAAiB,UAAU;AAAA,IAC7B;AACA,WAAO,iBAAiB,YAAY,UAAU;AAC9C,WAAO,MAAM,OAAO,oBAAoB,YAAY,UAAU;AAAA,EAChE,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,QAAI,WAAW,YAAY,MAAM;AAC/B,iBAAW,UAAU;AACrB;AAAA,IACF;AACA,QAAI,WAAW,YAAY,WAAY;AAEvC,QAAI,iBAAiB,SAAS;AAC5B,uBAAiB,UAAU;AAC3B,0BAAoB,UAAU,KAAK;AAAA,QACjC;AAAA,QACA,oBAAoB,UAAU;AAAA,MAChC;AAAA,IACF,OAAO;AACL,0BAAoB,WAAW;AAAA,IACjC;AACA,eAAW,UAAU;AAAA,EACvB,GAAG,CAAC,UAAU,CAAC;AAEf,SACE;AAAA,IAAC,kBAAkB;AAAA,IAAlB;AAAA,MACC,OAAO,EAAE,iBAAiB,oBAAoB;AAAA,MAE7C;AAAA;AAAA,EACH;AAEJ;AAEO,SAAS,uBAA+C;AAC7D,QAAM,MAAM,WAAW,iBAAiB;AACxC,MAAI,CAAC,KAAK;AACR,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,wBAAgC;AAC9C,SAAO,qBAAqB,EAAE;AAChC;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/providers/whitelabel.provider.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { createContext, ReactNode, useContext } from \"react\";\r\nimport type { WhitelabelData, GeneralStyleJson, PageStyleJson, DashboardStyleJson } from \"../modules/whitelabel/schema\";\r\n\r\ninterface WhitelabelContextProps {\r\n whitelabel: WhitelabelData | null;\r\n}\r\n\r\nconst WhitelabelContext = createContext<WhitelabelContextProps | undefined>(undefined);\r\n\r\ninterface WhitelabelProviderProps {\r\n children: ReactNode;\r\n whitelabel: WhitelabelData | null;\r\n}\r\n\r\nexport function WhitelabelProvider({\r\n children,\r\n whitelabel,\r\n}: WhitelabelProviderProps) {\r\n return (\r\n <WhitelabelContext.Provider value={{ whitelabel }}>\r\n {children}\r\n </WhitelabelContext.Provider>\r\n );\r\n}\r\n\r\nexport function useWhitelabel(): WhitelabelContextProps {\r\n const context = useContext(WhitelabelContext);\r\n if (context === undefined) {\r\n throw new Error(\"useWhitelabel deve ser usado dentro de um WhitelabelProvider\");\r\n }\r\n return context;\r\n}\r\n\r\nexport function useWhitelabelStyles() {\r\n const { whitelabel } = useWhitelabel();\r\n return {\r\n general: whitelabel?.general ?? null,\r\n signin_page: whitelabel?.signin_page ?? null,\r\n signup_page: whitelabel?.signup_page ?? null,\r\n dashboard: whitelabel?.dashboard ?? null,\r\n };\r\n}\r\n\r\nexport function useIsDefaultWhitelabel(): boolean {\r\n const context = useContext(WhitelabelContext);\r\n return !context?.whitelabel || context.whitelabel.id === 1;\r\n}\r\n\r\nexport function useWhitelabelUrls() {\r\n const { whitelabel } = useWhitelabel();\r\n return {\r\n editorUrl: whitelabel?.editor_url ?? '',\r\n pagesUrl: whitelabel?.pages_url ?? '',\r\n accountsUrl: whitelabel?.accounts_url ?? '',\r\n previewUrl: whitelabel?.pages_preview_url ?? '',\r\n };\r\n}\r\n\r\ntype ExternalContractingTarget = \"plans\" | \"contracting\";\r\n\r\nexport function useExternalContracting() {\r\n const { whitelabel } = useWhitelabel();\r\n\r\n const isExternalContracting = !!whitelabel?.external_contracting;\r\n\r\n const getExternalUrl = (target: ExternalContractingTarget): string | null => {\r\n if (!whitelabel?.external_contracting) return null;\r\n\r\n if (target === \"plans\") {\r\n return whitelabel.external_plans_url ?? whitelabel.external_contracting_url ?? null;\r\n }\r\n\r\n return whitelabel.external_contracting_url ?? whitelabel.external_plans_url ?? null;\r\n };\r\n\r\n const redirectToExternal = (target: ExternalContractingTarget): boolean => {\r\n const url = getExternalUrl(target);\r\n if (!url) return false;\r\n window.location.href = url;\r\n return true;\r\n };\r\n\r\n return {\r\n isExternalContracting,\r\n getExternalUrl,\r\n redirectToExternal,\r\n };\r\n}\r\n"],"mappings":";AAqBI;AAnBJ,SAAS,eAA0B,kBAAkB;AAOrD,MAAM,oBAAoB,cAAkD,MAAS;AAO9E,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AACF,GAA4B;AAC1B,SACE,oBAAC,kBAAkB,UAAlB,EAA2B,OAAO,EAAE,WAAW,GAC7C,UACH;AAEJ;AAEO,SAAS,gBAAwC;AACtD,QAAM,UAAU,WAAW,iBAAiB;AAC5C,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI,MAAM,8DAA8D;AAAA,EAChF;AACA,SAAO;AACT;AAEO,SAAS,sBAAsB;AACpC,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,SAAO;AAAA,IACL,SAAS,YAAY,WAAW;AAAA,IAChC,aAAa,YAAY,eAAe;AAAA,IACxC,aAAa,YAAY,eAAe;AAAA,IACxC,WAAW,YAAY,aAAa;AAAA,EACtC;AACF;AAEO,SAAS,yBAAkC;AAChD,QAAM,UAAU,WAAW,iBAAiB;AAC5C,SAAO,CAAC,SAAS,cAAc,QAAQ,WAAW,OAAO;AAC3D;AAEO,SAAS,oBAAoB;AAClC,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,SAAO;AAAA,IACL,WAAW,YAAY,cAAc;AAAA,IACrC,UAAU,YAAY,aAAa;AAAA,IACnC,aAAa,YAAY,gBAAgB;AAAA,IACzC,YAAY,YAAY,qBAAqB;AAAA,EAC/C;AACF;AAIO,SAAS,yBAAyB;AACvC,QAAM,EAAE,WAAW,IAAI,cAAc;AAErC,QAAM,wBAAwB,CAAC,CAAC,YAAY;AAE5C,QAAM,iBAAiB,CAAC,WAAqD;AAC3E,QAAI,CAAC,YAAY,qBAAsB,QAAO;AAE9C,QAAI,WAAW,SAAS;AACtB,aAAO,WAAW,sBAAsB,WAAW,4BAA4B;AAAA,IACjF;AAEA,WAAO,WAAW,4BAA4B,WAAW,sBAAsB;AAAA,EACjF;AAEA,QAAM,qBAAqB,CAAC,WAA+C;AACzE,UAAM,MAAM,eAAe,MAAM;AACjC,QAAI,CAAC,IAAK,QAAO;AACjB,WAAO,SAAS,OAAO;AACvB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/providers/whitelabel.provider.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, ReactNode, useContext } from \"react\";\nimport type { WhitelabelData, GeneralStyleJson, PageStyleJson, DashboardStyleJson } from \"../modules/whitelabel/schema\";\n\ninterface WhitelabelContextProps {\n whitelabel: WhitelabelData | null;\n}\n\nconst WhitelabelContext = createContext<WhitelabelContextProps | undefined>(undefined);\n\ninterface WhitelabelProviderProps {\n children: ReactNode;\n whitelabel: WhitelabelData | null;\n}\n\nexport function WhitelabelProvider({\n children,\n whitelabel,\n}: WhitelabelProviderProps) {\n return (\n <WhitelabelContext.Provider value={{ whitelabel }}>\n {children}\n </WhitelabelContext.Provider>\n );\n}\n\nexport function useWhitelabel(): WhitelabelContextProps {\n const context = useContext(WhitelabelContext);\n if (context === undefined) {\n throw new Error(\"useWhitelabel deve ser usado dentro de um WhitelabelProvider\");\n }\n return context;\n}\n\nexport function useWhitelabelStyles() {\n const { whitelabel } = useWhitelabel();\n return {\n general: whitelabel?.general ?? null,\n signin_page: whitelabel?.signin_page ?? null,\n signup_page: whitelabel?.signup_page ?? null,\n dashboard: whitelabel?.dashboard ?? null,\n };\n}\n\nexport function useIsDefaultWhitelabel(): boolean {\n const context = useContext(WhitelabelContext);\n return !context?.whitelabel || context.whitelabel.id === 1;\n}\n\nexport function useWhitelabelUrls() {\n const { whitelabel } = useWhitelabel();\n return {\n editorUrl: whitelabel?.editor_url ?? '',\n pagesUrl: whitelabel?.pages_url ?? '',\n accountsUrl: whitelabel?.accounts_url ?? '',\n previewUrl: whitelabel?.pages_preview_url ?? '',\n };\n}\n\ntype ExternalContractingTarget = \"plans\" | \"contracting\";\n\nexport function useExternalContracting() {\n const { whitelabel } = useWhitelabel();\n\n const isExternalContracting = !!whitelabel?.external_contracting;\n\n const getExternalUrl = (target: ExternalContractingTarget): string | null => {\n if (!whitelabel?.external_contracting) return null;\n\n if (target === \"plans\") {\n return whitelabel.external_plans_url ?? whitelabel.external_contracting_url ?? null;\n }\n\n return whitelabel.external_contracting_url ?? whitelabel.external_plans_url ?? null;\n };\n\n const redirectToExternal = (target: ExternalContractingTarget): boolean => {\n const url = getExternalUrl(target);\n if (!url) return false;\n window.location.href = url;\n return true;\n };\n\n return {\n isExternalContracting,\n getExternalUrl,\n redirectToExternal,\n };\n}\n"],"mappings":";AAqBI;AAnBJ,SAAS,eAA0B,kBAAkB;AAOrD,MAAM,oBAAoB,cAAkD,MAAS;AAO9E,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AACF,GAA4B;AAC1B,SACE,oBAAC,kBAAkB,UAAlB,EAA2B,OAAO,EAAE,WAAW,GAC7C,UACH;AAEJ;AAEO,SAAS,gBAAwC;AACtD,QAAM,UAAU,WAAW,iBAAiB;AAC5C,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI,MAAM,8DAA8D;AAAA,EAChF;AACA,SAAO;AACT;AAEO,SAAS,sBAAsB;AACpC,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,SAAO;AAAA,IACL,SAAS,YAAY,WAAW;AAAA,IAChC,aAAa,YAAY,eAAe;AAAA,IACxC,aAAa,YAAY,eAAe;AAAA,IACxC,WAAW,YAAY,aAAa;AAAA,EACtC;AACF;AAEO,SAAS,yBAAkC;AAChD,QAAM,UAAU,WAAW,iBAAiB;AAC5C,SAAO,CAAC,SAAS,cAAc,QAAQ,WAAW,OAAO;AAC3D;AAEO,SAAS,oBAAoB;AAClC,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,SAAO;AAAA,IACL,WAAW,YAAY,cAAc;AAAA,IACrC,UAAU,YAAY,aAAa;AAAA,IACnC,aAAa,YAAY,gBAAgB;AAAA,IACzC,YAAY,YAAY,qBAAqB;AAAA,EAC/C;AACF;AAIO,SAAS,yBAAyB;AACvC,QAAM,EAAE,WAAW,IAAI,cAAc;AAErC,QAAM,wBAAwB,CAAC,CAAC,YAAY;AAE5C,QAAM,iBAAiB,CAAC,WAAqD;AAC3E,QAAI,CAAC,YAAY,qBAAsB,QAAO;AAE9C,QAAI,WAAW,SAAS;AACtB,aAAO,WAAW,sBAAsB,WAAW,4BAA4B;AAAA,IACjF;AAEA,WAAO,WAAW,4BAA4B,WAAW,sBAAsB;AAAA,EACjF;AAEA,QAAM,qBAAqB,CAAC,WAA+C;AACzE,UAAM,MAAM,eAAe,MAAM;AACjC,QAAI,CAAC,IAAK,QAAO;AACjB,WAAO,SAAS,OAAO;AACvB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/route.ts"],"sourcesContent":["export { safeRouteHandler } from './infra/route/safe-route-handler';\r\nexport { searchParamsToParams } from './infra/route/search-params';\r\nexport { parseId } from './infra/route/parse-id';\r\nexport { parseNumericFields } from './infra/route/parse-numeric';\r\n"],"mappings":"AAAA,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AACrC,SAAS,eAAe;AACxB,SAAS,0BAA0B;","names":[]}
1
+ {"version":3,"sources":["../src/route.ts"],"sourcesContent":["export { safeRouteHandler } from './infra/route/safe-route-handler';\nexport { searchParamsToParams } from './infra/route/search-params';\nexport { parseId } from './infra/route/parse-id';\nexport { parseNumericFields } from './infra/route/parse-numeric';\n"],"mappings":"AAAA,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AACrC,SAAS,eAAe;AACxB,SAAS,0BAA0B;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/store/useAccountModals.ts"],"sourcesContent":["'use client';\r\n\r\nimport { create } from 'zustand';\r\nimport type { AccountSectionType } from '../enums/AccountSectionType';\r\n\r\ntype AccountModalType =\r\n | 'configurations'\r\n | 'deleteAccount'\r\n | 'isntPossibleDelete'\r\n | 'confirmDelete';\r\n\r\nexport interface AccountModalsConfig {\r\n onGoToSubscription?: () => void;\r\n}\r\n\r\ninterface DeleteAccountPayload {\r\n password: string;\r\n}\r\n\r\ninterface AccountModalsState {\r\n activeModal: AccountModalType | null;\r\n config: AccountModalsConfig;\r\n initialSection?: AccountSectionType;\r\n\r\n /** Payload coletado no DeleteAccountModal, consumido pelo ConfirmDeleteAccountModal. */\r\n deleteAccountPayload: DeleteAccountPayload | null;\r\n /** Mensagem de erro do backend quando o delete falha (ex.: senha inválida).\r\n * Mostrada no DeleteAccountModal quando o usuário é mandado de volta. */\r\n deleteAccountError: string | null;\r\n\r\n /** Called by <AccountModals> to keep app-level config in sync */\r\n updateConfig: (config: AccountModalsConfig) => void;\r\n\r\n openConfigurations: (initialSection?: AccountSectionType) => void;\r\n openDeleteAccount: (error?: string) => void;\r\n openIsntPossibleDelete: () => void;\r\n openConfirmDelete: (payload: DeleteAccountPayload) => void;\r\n clearDeleteAccountError: () => void;\r\n close: () => void;\r\n}\r\n\r\nexport const useAccountModals = create<AccountModalsState>((set) => ({\r\n activeModal: null,\r\n config: {},\r\n initialSection: undefined,\r\n deleteAccountPayload: null,\r\n deleteAccountError: null,\r\n\r\n updateConfig: (config) => set({ config }),\r\n\r\n openConfigurations: (initialSection) =>\r\n set({\r\n activeModal: 'configurations',\r\n initialSection,\r\n deleteAccountPayload: null,\r\n deleteAccountError: null,\r\n }),\r\n\r\n openDeleteAccount: (error) =>\r\n set({\r\n activeModal: 'deleteAccount',\r\n deleteAccountPayload: null,\r\n deleteAccountError: error ?? null,\r\n }),\r\n\r\n openIsntPossibleDelete: () =>\r\n set({ activeModal: 'isntPossibleDelete' }),\r\n\r\n openConfirmDelete: (payload) =>\r\n set({\r\n activeModal: 'confirmDelete',\r\n deleteAccountPayload: payload,\r\n deleteAccountError: null,\r\n }),\r\n\r\n clearDeleteAccountError: () => set({ deleteAccountError: null }),\r\n\r\n close: () =>\r\n set({\r\n activeModal: null,\r\n initialSection: undefined,\r\n deleteAccountPayload: null,\r\n deleteAccountError: null,\r\n }),\r\n}));\r\n"],"mappings":";AAEA,SAAS,cAAc;AAuChB,MAAM,mBAAmB,OAA2B,CAAC,SAAS;AAAA,EACnE,aAAa;AAAA,EACb,QAAQ,CAAC;AAAA,EACT,gBAAgB;AAAA,EAChB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EAEpB,cAAc,CAAC,WAAW,IAAI,EAAE,OAAO,CAAC;AAAA,EAExC,oBAAoB,CAAC,mBACnB,IAAI;AAAA,IACF,aAAa;AAAA,IACb;AAAA,IACA,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,EACtB,CAAC;AAAA,EAEH,mBAAmB,CAAC,UAClB,IAAI;AAAA,IACF,aAAa;AAAA,IACb,sBAAsB;AAAA,IACtB,oBAAoB,SAAS;AAAA,EAC/B,CAAC;AAAA,EAEH,wBAAwB,MACtB,IAAI,EAAE,aAAa,qBAAqB,CAAC;AAAA,EAE3C,mBAAmB,CAAC,YAClB,IAAI;AAAA,IACF,aAAa;AAAA,IACb,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,EACtB,CAAC;AAAA,EAEH,yBAAyB,MAAM,IAAI,EAAE,oBAAoB,KAAK,CAAC;AAAA,EAE/D,OAAO,MACL,IAAI;AAAA,IACF,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,EACtB,CAAC;AACL,EAAE;","names":[]}
1
+ {"version":3,"sources":["../../src/store/useAccountModals.ts"],"sourcesContent":["'use client';\n\nimport { create } from 'zustand';\nimport type { AccountSectionType } from '../enums/AccountSectionType';\n\ntype AccountModalType =\n | 'configurations'\n | 'deleteAccount'\n | 'isntPossibleDelete'\n | 'confirmDelete';\n\nexport interface AccountModalsConfig {\n onGoToSubscription?: () => void;\n}\n\ninterface DeleteAccountPayload {\n password: string;\n}\n\ninterface AccountModalsState {\n activeModal: AccountModalType | null;\n config: AccountModalsConfig;\n initialSection?: AccountSectionType;\n\n /** Payload coletado no DeleteAccountModal, consumido pelo ConfirmDeleteAccountModal. */\n deleteAccountPayload: DeleteAccountPayload | null;\n /** Mensagem de erro do backend quando o delete falha (ex.: senha inválida).\n * Mostrada no DeleteAccountModal quando o usuário é mandado de volta. */\n deleteAccountError: string | null;\n\n /** Called by <AccountModals> to keep app-level config in sync */\n updateConfig: (config: AccountModalsConfig) => void;\n\n openConfigurations: (initialSection?: AccountSectionType) => void;\n openDeleteAccount: (error?: string) => void;\n openIsntPossibleDelete: () => void;\n openConfirmDelete: (payload: DeleteAccountPayload) => void;\n clearDeleteAccountError: () => void;\n close: () => void;\n}\n\nexport const useAccountModals = create<AccountModalsState>((set) => ({\n activeModal: null,\n config: {},\n initialSection: undefined,\n deleteAccountPayload: null,\n deleteAccountError: null,\n\n updateConfig: (config) => set({ config }),\n\n openConfigurations: (initialSection) =>\n set({\n activeModal: 'configurations',\n initialSection,\n deleteAccountPayload: null,\n deleteAccountError: null,\n }),\n\n openDeleteAccount: (error) =>\n set({\n activeModal: 'deleteAccount',\n deleteAccountPayload: null,\n deleteAccountError: error ?? null,\n }),\n\n openIsntPossibleDelete: () =>\n set({ activeModal: 'isntPossibleDelete' }),\n\n openConfirmDelete: (payload) =>\n set({\n activeModal: 'confirmDelete',\n deleteAccountPayload: payload,\n deleteAccountError: null,\n }),\n\n clearDeleteAccountError: () => set({ deleteAccountError: null }),\n\n close: () =>\n set({\n activeModal: null,\n initialSection: undefined,\n deleteAccountPayload: null,\n deleteAccountError: null,\n }),\n}));\n"],"mappings":";AAEA,SAAS,cAAc;AAuChB,MAAM,mBAAmB,OAA2B,CAAC,SAAS;AAAA,EACnE,aAAa;AAAA,EACb,QAAQ,CAAC;AAAA,EACT,gBAAgB;AAAA,EAChB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EAEpB,cAAc,CAAC,WAAW,IAAI,EAAE,OAAO,CAAC;AAAA,EAExC,oBAAoB,CAAC,mBACnB,IAAI;AAAA,IACF,aAAa;AAAA,IACb;AAAA,IACA,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,EACtB,CAAC;AAAA,EAEH,mBAAmB,CAAC,UAClB,IAAI;AAAA,IACF,aAAa;AAAA,IACb,sBAAsB;AAAA,IACtB,oBAAoB,SAAS;AAAA,EAC/B,CAAC;AAAA,EAEH,wBAAwB,MACtB,IAAI,EAAE,aAAa,qBAAqB,CAAC;AAAA,EAE3C,mBAAmB,CAAC,YAClB,IAAI;AAAA,IACF,aAAa;AAAA,IACb,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,EACtB,CAAC;AAAA,EAEH,yBAAyB,MAAM,IAAI,EAAE,oBAAoB,KAAK,CAAC;AAAA,EAE/D,OAAO,MACL,IAAI;AAAA,IACF,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,EACtB,CAAC;AACL,EAAE;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/store/useBuyCreditsModal.ts"],"sourcesContent":["import { useModalManager } from './useModalManager';\r\n\r\ninterface BuyCreditsModalData {\r\n onConfirm?: (creditAmount: number, price: number) => void;\r\n}\r\n\r\nexport const useBuyCreditsModal = () => {\r\n const { activeModal, modalData, openModal, closeModal } = useModalManager();\r\n\r\n const isOpen = activeModal === 'buyCreditsModal';\r\n const data = modalData as BuyCreditsModalData;\r\n\r\n return {\r\n open: isOpen,\r\n onConfirm: data?.onConfirm,\r\n\r\n openModal: (onConfirm?: (creditAmount: number, price: number) => void) =>\r\n openModal('buyCreditsModal', { onConfirm }),\r\n closeModal,\r\n };\r\n};\r\n"],"mappings":"AAAA,SAAS,uBAAuB;AAMzB,MAAM,qBAAqB,MAAM;AACtC,QAAM,EAAE,aAAa,WAAW,WAAW,WAAW,IAAI,gBAAgB;AAE1E,QAAM,SAAS,gBAAgB;AAC/B,QAAM,OAAO;AAEb,SAAO;AAAA,IACL,MAAM;AAAA,IACN,WAAW,MAAM;AAAA,IAEjB,WAAW,CAAC,cACV,UAAU,mBAAmB,EAAE,UAAU,CAAC;AAAA,IAC5C;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/store/useBuyCreditsModal.ts"],"sourcesContent":["import { useModalManager } from './useModalManager';\n\ninterface BuyCreditsModalData {\n onConfirm?: (creditAmount: number, price: number) => void;\n}\n\nexport const useBuyCreditsModal = () => {\n const { activeModal, modalData, openModal, closeModal } = useModalManager();\n\n const isOpen = activeModal === 'buyCreditsModal';\n const data = modalData as BuyCreditsModalData;\n\n return {\n open: isOpen,\n onConfirm: data?.onConfirm,\n\n openModal: (onConfirm?: (creditAmount: number, price: number) => void) =>\n openModal('buyCreditsModal', { onConfirm }),\n closeModal,\n };\n};\n"],"mappings":"AAAA,SAAS,uBAAuB;AAMzB,MAAM,qBAAqB,MAAM;AACtC,QAAM,EAAE,aAAa,WAAW,WAAW,WAAW,IAAI,gBAAgB;AAE1E,QAAM,SAAS,gBAAgB;AAC/B,QAAM,OAAO;AAEb,SAAO;AAAA,IACL,MAAM;AAAA,IACN,WAAW,MAAM;AAAA,IAEjB,WAAW,CAAC,cACV,UAAU,mBAAmB,EAAE,UAAU,CAAC;AAAA,IAC5C;AAAA,EACF;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/store/useCreditsDisabledModal.ts"],"sourcesContent":["import { useModalManager } from './useModalManager';\r\n\r\nexport const useCreditsDisabledModal = () => {\r\n const { activeModal, openModal, closeModal } = useModalManager();\r\n\r\n return {\r\n open: activeModal === 'creditsDisabledModal',\r\n openModal: () => openModal('creditsDisabledModal'),\r\n closeModal,\r\n };\r\n};\r\n"],"mappings":"AAAA,SAAS,uBAAuB;AAEzB,MAAM,0BAA0B,MAAM;AAC3C,QAAM,EAAE,aAAa,WAAW,WAAW,IAAI,gBAAgB;AAE/D,SAAO;AAAA,IACL,MAAM,gBAAgB;AAAA,IACtB,WAAW,MAAM,UAAU,sBAAsB;AAAA,IACjD;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/store/useCreditsDisabledModal.ts"],"sourcesContent":["import { useModalManager } from './useModalManager';\n\nexport const useCreditsDisabledModal = () => {\n const { activeModal, openModal, closeModal } = useModalManager();\n\n return {\n open: activeModal === 'creditsDisabledModal',\n openModal: () => openModal('creditsDisabledModal'),\n closeModal,\n };\n};\n"],"mappings":"AAAA,SAAS,uBAAuB;AAEzB,MAAM,0BAA0B,MAAM;AAC3C,QAAM,EAAE,aAAa,WAAW,WAAW,IAAI,gBAAgB;AAE/D,SAAO;AAAA,IACL,MAAM,gBAAgB;AAAA,IACtB,WAAW,MAAM,UAAU,sBAAsB;AAAA,IACjD;AAAA,EACF;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/store/useDesktopSidebarStore.ts"],"sourcesContent":["import { create } from \"zustand\";\r\nimport { useEffect } from \"react\";\r\n\r\nconst STORAGE_KEY = \"desktop-sidebar-expanded\";\r\n\r\ntype DesktopSidebarStore = {\r\n isExpanded: boolean;\r\n _hydrated: boolean;\r\n toggle: () => void;\r\n expand: () => void;\r\n collapse: () => void;\r\n _hydrate: () => void;\r\n};\r\n\r\nexport const useDesktopSidebarStore = create<DesktopSidebarStore>((set) => ({\r\n isExpanded: true,\r\n _hydrated: false,\r\n toggle: () => set((state) => {\r\n const next = !state.isExpanded;\r\n localStorage.setItem(STORAGE_KEY, String(next));\r\n return { isExpanded: next };\r\n }),\r\n expand: () => {\r\n localStorage.setItem(STORAGE_KEY, \"true\");\r\n return set({ isExpanded: true });\r\n },\r\n collapse: () => {\r\n localStorage.setItem(STORAGE_KEY, \"false\");\r\n return set({ isExpanded: false });\r\n },\r\n _hydrate: () => {\r\n const stored = localStorage.getItem(STORAGE_KEY);\r\n const value = stored === null ? true : stored === \"true\";\r\n set({ isExpanded: value, _hydrated: true });\r\n },\r\n}));\r\n\r\nexport function useDesktopSidebarHydration() {\r\n const hydrate = useDesktopSidebarStore((s) => s._hydrate);\r\n const hydrated = useDesktopSidebarStore((s) => s._hydrated);\r\n\r\n useEffect(() => {\r\n if (!hydrated) {\r\n hydrate();\r\n }\r\n }, [hydrate, hydrated]);\r\n}\r\n"],"mappings":"AAAA,SAAS,cAAc;AACvB,SAAS,iBAAiB;AAE1B,MAAM,cAAc;AAWb,MAAM,yBAAyB,OAA4B,CAAC,SAAS;AAAA,EACxE,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,QAAQ,MAAM,IAAI,CAAC,UAAU;AACzB,UAAM,OAAO,CAAC,MAAM;AACpB,iBAAa,QAAQ,aAAa,OAAO,IAAI,CAAC;AAC9C,WAAO,EAAE,YAAY,KAAK;AAAA,EAC9B,CAAC;AAAA,EACD,QAAQ,MAAM;AACV,iBAAa,QAAQ,aAAa,MAAM;AACxC,WAAO,IAAI,EAAE,YAAY,KAAK,CAAC;AAAA,EACnC;AAAA,EACA,UAAU,MAAM;AACZ,iBAAa,QAAQ,aAAa,OAAO;AACzC,WAAO,IAAI,EAAE,YAAY,MAAM,CAAC;AAAA,EACpC;AAAA,EACA,UAAU,MAAM;AACZ,UAAM,SAAS,aAAa,QAAQ,WAAW;AAC/C,UAAM,QAAQ,WAAW,OAAO,OAAO,WAAW;AAClD,QAAI,EAAE,YAAY,OAAO,WAAW,KAAK,CAAC;AAAA,EAC9C;AACJ,EAAE;AAEK,SAAS,6BAA6B;AACzC,QAAM,UAAU,uBAAuB,CAAC,MAAM,EAAE,QAAQ;AACxD,QAAM,WAAW,uBAAuB,CAAC,MAAM,EAAE,SAAS;AAE1D,YAAU,MAAM;AACZ,QAAI,CAAC,UAAU;AACX,cAAQ;AAAA,IACZ;AAAA,EACJ,GAAG,CAAC,SAAS,QAAQ,CAAC;AAC1B;","names":[]}
1
+ {"version":3,"sources":["../../src/store/useDesktopSidebarStore.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { useEffect } from \"react\";\n\nconst STORAGE_KEY = \"desktop-sidebar-expanded\";\n\ntype DesktopSidebarStore = {\n isExpanded: boolean;\n _hydrated: boolean;\n toggle: () => void;\n expand: () => void;\n collapse: () => void;\n _hydrate: () => void;\n};\n\nexport const useDesktopSidebarStore = create<DesktopSidebarStore>((set) => ({\n isExpanded: true,\n _hydrated: false,\n toggle: () => set((state) => {\n const next = !state.isExpanded;\n localStorage.setItem(STORAGE_KEY, String(next));\n return { isExpanded: next };\n }),\n expand: () => {\n localStorage.setItem(STORAGE_KEY, \"true\");\n return set({ isExpanded: true });\n },\n collapse: () => {\n localStorage.setItem(STORAGE_KEY, \"false\");\n return set({ isExpanded: false });\n },\n _hydrate: () => {\n const stored = localStorage.getItem(STORAGE_KEY);\n const value = stored === null ? true : stored === \"true\";\n set({ isExpanded: value, _hydrated: true });\n },\n}));\n\nexport function useDesktopSidebarHydration() {\n const hydrate = useDesktopSidebarStore((s) => s._hydrate);\n const hydrated = useDesktopSidebarStore((s) => s._hydrated);\n\n useEffect(() => {\n if (!hydrated) {\n hydrate();\n }\n }, [hydrate, hydrated]);\n}\n"],"mappings":"AAAA,SAAS,cAAc;AACvB,SAAS,iBAAiB;AAE1B,MAAM,cAAc;AAWb,MAAM,yBAAyB,OAA4B,CAAC,SAAS;AAAA,EACxE,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,QAAQ,MAAM,IAAI,CAAC,UAAU;AACzB,UAAM,OAAO,CAAC,MAAM;AACpB,iBAAa,QAAQ,aAAa,OAAO,IAAI,CAAC;AAC9C,WAAO,EAAE,YAAY,KAAK;AAAA,EAC9B,CAAC;AAAA,EACD,QAAQ,MAAM;AACV,iBAAa,QAAQ,aAAa,MAAM;AACxC,WAAO,IAAI,EAAE,YAAY,KAAK,CAAC;AAAA,EACnC;AAAA,EACA,UAAU,MAAM;AACZ,iBAAa,QAAQ,aAAa,OAAO;AACzC,WAAO,IAAI,EAAE,YAAY,MAAM,CAAC;AAAA,EACpC;AAAA,EACA,UAAU,MAAM;AACZ,UAAM,SAAS,aAAa,QAAQ,WAAW;AAC/C,UAAM,QAAQ,WAAW,OAAO,OAAO,WAAW;AAClD,QAAI,EAAE,YAAY,OAAO,WAAW,KAAK,CAAC;AAAA,EAC9C;AACJ,EAAE;AAEK,SAAS,6BAA6B;AACzC,QAAM,UAAU,uBAAuB,CAAC,MAAM,EAAE,QAAQ;AACxD,QAAM,WAAW,uBAAuB,CAAC,MAAM,EAAE,SAAS;AAE1D,YAAU,MAAM;AACZ,QAAI,CAAC,UAAU;AACX,cAAQ;AAAA,IACZ;AAAA,EACJ,GAAG,CAAC,SAAS,QAAQ,CAAC;AAC1B;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/store/useMdSidebarStore.ts"],"sourcesContent":["import { create } from \"zustand\";\r\n\r\nconst STORAGE_KEY = \"md-sidebar-expanded\";\r\n\r\nfunction getInitialState(): boolean {\r\n if (typeof window === \"undefined\") return false;\r\n const stored = localStorage.getItem(STORAGE_KEY);\r\n if (stored === null) return false;\r\n return stored === \"true\";\r\n}\r\n\r\ntype MdSidebarStore = {\r\n isExpanded: boolean;\r\n toggle: () => void;\r\n expand: () => void;\r\n collapse: () => void;\r\n};\r\n\r\nexport const useMdSidebarStore = create<MdSidebarStore>((set) => ({\r\n isExpanded: getInitialState(),\r\n toggle: () => set((state) => {\r\n const next = !state.isExpanded;\r\n localStorage.setItem(STORAGE_KEY, String(next));\r\n return { isExpanded: next };\r\n }),\r\n expand: () => {\r\n localStorage.setItem(STORAGE_KEY, \"true\");\r\n return set({ isExpanded: true });\r\n },\r\n collapse: () => {\r\n localStorage.setItem(STORAGE_KEY, \"false\");\r\n return set({ isExpanded: false });\r\n },\r\n}));\r\n"],"mappings":"AAAA,SAAS,cAAc;AAEvB,MAAM,cAAc;AAEpB,SAAS,kBAA2B;AAChC,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,QAAM,SAAS,aAAa,QAAQ,WAAW;AAC/C,MAAI,WAAW,KAAM,QAAO;AAC5B,SAAO,WAAW;AACtB;AASO,MAAM,oBAAoB,OAAuB,CAAC,SAAS;AAAA,EAC9D,YAAY,gBAAgB;AAAA,EAC5B,QAAQ,MAAM,IAAI,CAAC,UAAU;AACzB,UAAM,OAAO,CAAC,MAAM;AACpB,iBAAa,QAAQ,aAAa,OAAO,IAAI,CAAC;AAC9C,WAAO,EAAE,YAAY,KAAK;AAAA,EAC9B,CAAC;AAAA,EACD,QAAQ,MAAM;AACV,iBAAa,QAAQ,aAAa,MAAM;AACxC,WAAO,IAAI,EAAE,YAAY,KAAK,CAAC;AAAA,EACnC;AAAA,EACA,UAAU,MAAM;AACZ,iBAAa,QAAQ,aAAa,OAAO;AACzC,WAAO,IAAI,EAAE,YAAY,MAAM,CAAC;AAAA,EACpC;AACJ,EAAE;","names":[]}
1
+ {"version":3,"sources":["../../src/store/useMdSidebarStore.ts"],"sourcesContent":["import { create } from \"zustand\";\n\nconst STORAGE_KEY = \"md-sidebar-expanded\";\n\nfunction getInitialState(): boolean {\n if (typeof window === \"undefined\") return false;\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored === null) return false;\n return stored === \"true\";\n}\n\ntype MdSidebarStore = {\n isExpanded: boolean;\n toggle: () => void;\n expand: () => void;\n collapse: () => void;\n};\n\nexport const useMdSidebarStore = create<MdSidebarStore>((set) => ({\n isExpanded: getInitialState(),\n toggle: () => set((state) => {\n const next = !state.isExpanded;\n localStorage.setItem(STORAGE_KEY, String(next));\n return { isExpanded: next };\n }),\n expand: () => {\n localStorage.setItem(STORAGE_KEY, \"true\");\n return set({ isExpanded: true });\n },\n collapse: () => {\n localStorage.setItem(STORAGE_KEY, \"false\");\n return set({ isExpanded: false });\n },\n}));\n"],"mappings":"AAAA,SAAS,cAAc;AAEvB,MAAM,cAAc;AAEpB,SAAS,kBAA2B;AAChC,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,QAAM,SAAS,aAAa,QAAQ,WAAW;AAC/C,MAAI,WAAW,KAAM,QAAO;AAC5B,SAAO,WAAW;AACtB;AASO,MAAM,oBAAoB,OAAuB,CAAC,SAAS;AAAA,EAC9D,YAAY,gBAAgB;AAAA,EAC5B,QAAQ,MAAM,IAAI,CAAC,UAAU;AACzB,UAAM,OAAO,CAAC,MAAM;AACpB,iBAAa,QAAQ,aAAa,OAAO,IAAI,CAAC;AAC9C,WAAO,EAAE,YAAY,KAAK;AAAA,EAC9B,CAAC;AAAA,EACD,QAAQ,MAAM;AACV,iBAAa,QAAQ,aAAa,MAAM;AACxC,WAAO,IAAI,EAAE,YAAY,KAAK,CAAC;AAAA,EACnC;AAAA,EACA,UAAU,MAAM;AACZ,iBAAa,QAAQ,aAAa,OAAO;AACzC,WAAO,IAAI,EAAE,YAAY,MAAM,CAAC;AAAA,EACpC;AACJ,EAAE;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/store/usePaidPlanRequiredModal.ts"],"sourcesContent":["import { useModalManager } from './useModalManager';\r\n\r\ninterface PaidPlanRequiredModalOptions {\r\n title?: string;\r\n description?: string;\r\n}\r\n\r\nexport function usePaidPlanRequiredModal() {\r\n const { activeModal, openModal, closeModal } = useModalManager();\r\n\r\n const isOpen = activeModal === 'paidPlanRequiredModal';\r\n\r\n return {\r\n open: isOpen,\r\n openModal: (options?: PaidPlanRequiredModalOptions) =>\r\n openModal('paidPlanRequiredModal', options ?? {}),\r\n closeModal,\r\n };\r\n}\r\n"],"mappings":"AAAA,SAAS,uBAAuB;AAOzB,SAAS,2BAA2B;AACvC,QAAM,EAAE,aAAa,WAAW,WAAW,IAAI,gBAAgB;AAE/D,QAAM,SAAS,gBAAgB;AAE/B,SAAO;AAAA,IACH,MAAM;AAAA,IACN,WAAW,CAAC,YACR,UAAU,yBAAyB,WAAW,CAAC,CAAC;AAAA,IACpD;AAAA,EACJ;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../src/store/usePaidPlanRequiredModal.ts"],"sourcesContent":["import { useModalManager } from './useModalManager';\n\ninterface PaidPlanRequiredModalOptions {\n title?: string;\n description?: string;\n}\n\nexport function usePaidPlanRequiredModal() {\n const { activeModal, openModal, closeModal } = useModalManager();\n\n const isOpen = activeModal === 'paidPlanRequiredModal';\n\n return {\n open: isOpen,\n openModal: (options?: PaidPlanRequiredModalOptions) =>\n openModal('paidPlanRequiredModal', options ?? {}),\n closeModal,\n };\n}\n"],"mappings":"AAAA,SAAS,uBAAuB;AAOzB,SAAS,2BAA2B;AACvC,QAAM,EAAE,aAAa,WAAW,WAAW,IAAI,gBAAgB;AAE/D,QAAM,SAAS,gBAAgB;AAE/B,SAAO;AAAA,IACH,MAAM;AAAA,IACN,WAAW,CAAC,YACR,UAAU,yBAAyB,WAAW,CAAC,CAAC;AAAA,IACpD;AAAA,EACJ;AACJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/constants/br-states.ts"],"sourcesContent":["export const BR_STATE_OPTIONS = [\r\n { value: 'AC', label: 'AC' },\r\n { value: 'AL', label: 'AL' },\r\n { value: 'AP', label: 'AP' },\r\n { value: 'AM', label: 'AM' },\r\n { value: 'BA', label: 'BA' },\r\n { value: 'CE', label: 'CE' },\r\n { value: 'DF', label: 'DF' },\r\n { value: 'ES', label: 'ES' },\r\n { value: 'GO', label: 'GO' },\r\n { value: 'MA', label: 'MA' },\r\n { value: 'MT', label: 'MT' },\r\n { value: 'MS', label: 'MS' },\r\n { value: 'MG', label: 'MG' },\r\n { value: 'PA', label: 'PA' },\r\n { value: 'PB', label: 'PB' },\r\n { value: 'PR', label: 'PR' },\r\n { value: 'PE', label: 'PE' },\r\n { value: 'PI', label: 'PI' },\r\n { value: 'RJ', label: 'RJ' },\r\n { value: 'RN', label: 'RN' },\r\n { value: 'RS', label: 'RS' },\r\n { value: 'RO', label: 'RO' },\r\n { value: 'RR', label: 'RR' },\r\n { value: 'SC', label: 'SC' },\r\n { value: 'SP', label: 'SP' },\r\n { value: 'SE', label: 'SE' },\r\n { value: 'TO', label: 'TO' },\r\n];\r\n"],"mappings":"AAAO,MAAM,mBAAmB;AAAA,EAC9B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAC7B;","names":[]}
1
+ {"version":3,"sources":["../../../src/utils/constants/br-states.ts"],"sourcesContent":["export const BR_STATE_OPTIONS = [\n { value: 'AC', label: 'AC' },\n { value: 'AL', label: 'AL' },\n { value: 'AP', label: 'AP' },\n { value: 'AM', label: 'AM' },\n { value: 'BA', label: 'BA' },\n { value: 'CE', label: 'CE' },\n { value: 'DF', label: 'DF' },\n { value: 'ES', label: 'ES' },\n { value: 'GO', label: 'GO' },\n { value: 'MA', label: 'MA' },\n { value: 'MT', label: 'MT' },\n { value: 'MS', label: 'MS' },\n { value: 'MG', label: 'MG' },\n { value: 'PA', label: 'PA' },\n { value: 'PB', label: 'PB' },\n { value: 'PR', label: 'PR' },\n { value: 'PE', label: 'PE' },\n { value: 'PI', label: 'PI' },\n { value: 'RJ', label: 'RJ' },\n { value: 'RN', label: 'RN' },\n { value: 'RS', label: 'RS' },\n { value: 'RO', label: 'RO' },\n { value: 'RR', label: 'RR' },\n { value: 'SC', label: 'SC' },\n { value: 'SP', label: 'SP' },\n { value: 'SE', label: 'SE' },\n { value: 'TO', label: 'TO' },\n];\n"],"mappings":"AAAO,MAAM,mBAAmB;AAAA,EAC9B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAC7B;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/countries.ts"],"sourcesContent":["export interface Country {\r\n iso: string;\r\n name: string;\r\n dial: string;\r\n}\r\n\r\nexport function flagUrl(iso: string): string {\r\n return `https://hatscripts.github.io/circle-flags/flags/${iso.toLowerCase()}.svg`;\r\n}\r\n\r\nexport const COUNTRIES: Country[] = [\r\n { iso: 'BR', name: 'Brasil', dial: '+55' },\r\n { iso: 'US', name: 'United States', dial: '+1' },\r\n { iso: 'PT', name: 'Portugal', dial: '+351' },\r\n { iso: 'AF', name: 'Afghanistan', dial: '+93' },\r\n { iso: 'AL', name: 'Albania', dial: '+355' },\r\n { iso: 'DZ', name: 'Algeria', dial: '+213' },\r\n { iso: 'AD', name: 'Andorra', dial: '+376' },\r\n { iso: 'AO', name: 'Angola', dial: '+244' },\r\n { iso: 'AG', name: 'Antigua and Barbuda', dial: '+1268' },\r\n { iso: 'AR', name: 'Argentina', dial: '+54' },\r\n { iso: 'AM', name: 'Armenia', dial: '+374' },\r\n { iso: 'AU', name: 'Australia', dial: '+61' },\r\n { iso: 'AT', name: 'Austria', dial: '+43' },\r\n { iso: 'AZ', name: 'Azerbaijan', dial: '+994' },\r\n { iso: 'BS', name: 'Bahamas', dial: '+1242' },\r\n { iso: 'BH', name: 'Bahrain', dial: '+973' },\r\n { iso: 'BD', name: 'Bangladesh', dial: '+880' },\r\n { iso: 'BB', name: 'Barbados', dial: '+1246' },\r\n { iso: 'BY', name: 'Belarus', dial: '+375' },\r\n { iso: 'BE', name: 'Belgium', dial: '+32' },\r\n { iso: 'BZ', name: 'Belize', dial: '+501' },\r\n { iso: 'BJ', name: 'Benin', dial: '+229' },\r\n { iso: 'BT', name: 'Bhutan', dial: '+975' },\r\n { iso: 'BO', name: 'Bolivia', dial: '+591' },\r\n { iso: 'BA', name: 'Bosnia and Herzegovina', dial: '+387' },\r\n { iso: 'BW', name: 'Botswana', dial: '+267' },\r\n { iso: 'BN', name: 'Brunei', dial: '+673' },\r\n { iso: 'BG', name: 'Bulgaria', dial: '+359' },\r\n { iso: 'BF', name: 'Burkina Faso', dial: '+226' },\r\n { iso: 'BI', name: 'Burundi', dial: '+257' },\r\n { iso: 'KH', name: 'Cambodia', dial: '+855' },\r\n { iso: 'CM', name: 'Cameroon', dial: '+237' },\r\n { iso: 'CA', name: 'Canada', dial: '+1' },\r\n { iso: 'CV', name: 'Cape Verde', dial: '+238' },\r\n { iso: 'CF', name: 'Central African Republic', dial: '+236' },\r\n { iso: 'TD', name: 'Chad', dial: '+235' },\r\n { iso: 'CL', name: 'Chile', dial: '+56' },\r\n { iso: 'CN', name: 'China', dial: '+86' },\r\n { iso: 'CO', name: 'Colombia', dial: '+57' },\r\n { iso: 'KM', name: 'Comoros', dial: '+269' },\r\n { iso: 'CG', name: 'Congo', dial: '+242' },\r\n { iso: 'CD', name: 'Congo (DR)', dial: '+243' },\r\n { iso: 'CR', name: 'Costa Rica', dial: '+506' },\r\n { iso: 'HR', name: 'Croatia', dial: '+385' },\r\n { iso: 'CU', name: 'Cuba', dial: '+53' },\r\n { iso: 'CY', name: 'Cyprus', dial: '+357' },\r\n { iso: 'CZ', name: 'Czech Republic', dial: '+420' },\r\n { iso: 'DK', name: 'Denmark', dial: '+45' },\r\n { iso: 'DJ', name: 'Djibouti', dial: '+253' },\r\n { iso: 'DM', name: 'Dominica', dial: '+1767' },\r\n { iso: 'DO', name: 'Dominican Republic', dial: '+1809' },\r\n { iso: 'EC', name: 'Ecuador', dial: '+593' },\r\n { iso: 'EG', name: 'Egypt', dial: '+20' },\r\n { iso: 'SV', name: 'El Salvador', dial: '+503' },\r\n { iso: 'GQ', name: 'Equatorial Guinea', dial: '+240' },\r\n { iso: 'ER', name: 'Eritrea', dial: '+291' },\r\n { iso: 'EE', name: 'Estonia', dial: '+372' },\r\n { iso: 'SZ', name: 'Eswatini', dial: '+268' },\r\n { iso: 'ET', name: 'Ethiopia', dial: '+251' },\r\n { iso: 'FJ', name: 'Fiji', dial: '+679' },\r\n { iso: 'FI', name: 'Finland', dial: '+358' },\r\n { iso: 'FR', name: 'France', dial: '+33' },\r\n { iso: 'GA', name: 'Gabon', dial: '+241' },\r\n { iso: 'GM', name: 'Gambia', dial: '+220' },\r\n { iso: 'GE', name: 'Georgia', dial: '+995' },\r\n { iso: 'DE', name: 'Germany', dial: '+49' },\r\n { iso: 'GH', name: 'Ghana', dial: '+233' },\r\n { iso: 'GR', name: 'Greece', dial: '+30' },\r\n { iso: 'GD', name: 'Grenada', dial: '+1473' },\r\n { iso: 'GT', name: 'Guatemala', dial: '+502' },\r\n { iso: 'GN', name: 'Guinea', dial: '+224' },\r\n { iso: 'GW', name: 'Guinea-Bissau', dial: '+245' },\r\n { iso: 'GY', name: 'Guyana', dial: '+592' },\r\n { iso: 'HT', name: 'Haiti', dial: '+509' },\r\n { iso: 'HN', name: 'Honduras', dial: '+504' },\r\n { iso: 'HU', name: 'Hungary', dial: '+36' },\r\n { iso: 'IS', name: 'Iceland', dial: '+354' },\r\n { iso: 'IN', name: 'India', dial: '+91' },\r\n { iso: 'ID', name: 'Indonesia', dial: '+62' },\r\n { iso: 'IR', name: 'Iran', dial: '+98' },\r\n { iso: 'IQ', name: 'Iraq', dial: '+964' },\r\n { iso: 'IE', name: 'Ireland', dial: '+353' },\r\n { iso: 'IL', name: 'Israel', dial: '+972' },\r\n { iso: 'IT', name: 'Italy', dial: '+39' },\r\n { iso: 'JM', name: 'Jamaica', dial: '+1876' },\r\n { iso: 'JP', name: 'Japan', dial: '+81' },\r\n { iso: 'JO', name: 'Jordan', dial: '+962' },\r\n { iso: 'KZ', name: 'Kazakhstan', dial: '+7' },\r\n { iso: 'KE', name: 'Kenya', dial: '+254' },\r\n { iso: 'KI', name: 'Kiribati', dial: '+686' },\r\n { iso: 'KW', name: 'Kuwait', dial: '+965' },\r\n { iso: 'KG', name: 'Kyrgyzstan', dial: '+996' },\r\n { iso: 'LA', name: 'Laos', dial: '+856' },\r\n { iso: 'LV', name: 'Latvia', dial: '+371' },\r\n { iso: 'LB', name: 'Lebanon', dial: '+961' },\r\n { iso: 'LS', name: 'Lesotho', dial: '+266' },\r\n { iso: 'LR', name: 'Liberia', dial: '+231' },\r\n { iso: 'LY', name: 'Libya', dial: '+218' },\r\n { iso: 'LI', name: 'Liechtenstein', dial: '+423' },\r\n { iso: 'LT', name: 'Lithuania', dial: '+370' },\r\n { iso: 'LU', name: 'Luxembourg', dial: '+352' },\r\n { iso: 'MG', name: 'Madagascar', dial: '+261' },\r\n { iso: 'MW', name: 'Malawi', dial: '+265' },\r\n { iso: 'MY', name: 'Malaysia', dial: '+60' },\r\n { iso: 'MV', name: 'Maldives', dial: '+960' },\r\n { iso: 'ML', name: 'Mali', dial: '+223' },\r\n { iso: 'MT', name: 'Malta', dial: '+356' },\r\n { iso: 'MH', name: 'Marshall Islands', dial: '+692' },\r\n { iso: 'MR', name: 'Mauritania', dial: '+222' },\r\n { iso: 'MU', name: 'Mauritius', dial: '+230' },\r\n { iso: 'MX', name: 'Mexico', dial: '+52' },\r\n { iso: 'FM', name: 'Micronesia', dial: '+691' },\r\n { iso: 'MD', name: 'Moldova', dial: '+373' },\r\n { iso: 'MC', name: 'Monaco', dial: '+377' },\r\n { iso: 'MN', name: 'Mongolia', dial: '+976' },\r\n { iso: 'ME', name: 'Montenegro', dial: '+382' },\r\n { iso: 'MA', name: 'Morocco', dial: '+212' },\r\n { iso: 'MZ', name: 'Mozambique', dial: '+258' },\r\n { iso: 'MM', name: 'Myanmar', dial: '+95' },\r\n { iso: 'NA', name: 'Namibia', dial: '+264' },\r\n { iso: 'NR', name: 'Nauru', dial: '+674' },\r\n { iso: 'NP', name: 'Nepal', dial: '+977' },\r\n { iso: 'NL', name: 'Netherlands', dial: '+31' },\r\n { iso: 'NZ', name: 'New Zealand', dial: '+64' },\r\n { iso: 'NI', name: 'Nicaragua', dial: '+505' },\r\n { iso: 'NE', name: 'Niger', dial: '+227' },\r\n { iso: 'NG', name: 'Nigeria', dial: '+234' },\r\n { iso: 'KP', name: 'North Korea', dial: '+850' },\r\n { iso: 'MK', name: 'North Macedonia', dial: '+389' },\r\n { iso: 'NO', name: 'Norway', dial: '+47' },\r\n { iso: 'OM', name: 'Oman', dial: '+968' },\r\n { iso: 'PK', name: 'Pakistan', dial: '+92' },\r\n { iso: 'PW', name: 'Palau', dial: '+680' },\r\n { iso: 'PS', name: 'Palestine', dial: '+970' },\r\n { iso: 'PA', name: 'Panama', dial: '+507' },\r\n { iso: 'PG', name: 'Papua New Guinea', dial: '+675' },\r\n { iso: 'PY', name: 'Paraguay', dial: '+595' },\r\n { iso: 'PE', name: 'Peru', dial: '+51' },\r\n { iso: 'PH', name: 'Philippines', dial: '+63' },\r\n { iso: 'PL', name: 'Poland', dial: '+48' },\r\n { iso: 'QA', name: 'Qatar', dial: '+974' },\r\n { iso: 'RO', name: 'Romania', dial: '+40' },\r\n { iso: 'RU', name: 'Russia', dial: '+7' },\r\n { iso: 'RW', name: 'Rwanda', dial: '+250' },\r\n { iso: 'KN', name: 'Saint Kitts and Nevis', dial: '+1869' },\r\n { iso: 'LC', name: 'Saint Lucia', dial: '+1758' },\r\n { iso: 'VC', name: 'Saint Vincent and the Grenadines', dial: '+1784' },\r\n { iso: 'WS', name: 'Samoa', dial: '+685' },\r\n { iso: 'SM', name: 'San Marino', dial: '+378' },\r\n { iso: 'ST', name: 'São Tomé and Príncipe', dial: '+239' },\r\n { iso: 'SA', name: 'Saudi Arabia', dial: '+966' },\r\n { iso: 'SN', name: 'Senegal', dial: '+221' },\r\n { iso: 'RS', name: 'Serbia', dial: '+381' },\r\n { iso: 'SC', name: 'Seychelles', dial: '+248' },\r\n { iso: 'SL', name: 'Sierra Leone', dial: '+232' },\r\n { iso: 'SG', name: 'Singapore', dial: '+65' },\r\n { iso: 'SK', name: 'Slovakia', dial: '+421' },\r\n { iso: 'SI', name: 'Slovenia', dial: '+386' },\r\n { iso: 'SB', name: 'Solomon Islands', dial: '+677' },\r\n { iso: 'SO', name: 'Somalia', dial: '+252' },\r\n { iso: 'ZA', name: 'South Africa', dial: '+27' },\r\n { iso: 'KR', name: 'South Korea', dial: '+82' },\r\n { iso: 'SS', name: 'South Sudan', dial: '+211' },\r\n { iso: 'ES', name: 'Spain', dial: '+34' },\r\n { iso: 'LK', name: 'Sri Lanka', dial: '+94' },\r\n { iso: 'SD', name: 'Sudan', dial: '+249' },\r\n { iso: 'SR', name: 'Suriname', dial: '+597' },\r\n { iso: 'SE', name: 'Sweden', dial: '+46' },\r\n { iso: 'CH', name: 'Switzerland', dial: '+41' },\r\n { iso: 'SY', name: 'Syria', dial: '+963' },\r\n { iso: 'TW', name: 'Taiwan', dial: '+886' },\r\n { iso: 'TJ', name: 'Tajikistan', dial: '+992' },\r\n { iso: 'TZ', name: 'Tanzania', dial: '+255' },\r\n { iso: 'TH', name: 'Thailand', dial: '+66' },\r\n { iso: 'TL', name: 'Timor-Leste', dial: '+670' },\r\n { iso: 'TG', name: 'Togo', dial: '+228' },\r\n { iso: 'TO', name: 'Tonga', dial: '+676' },\r\n { iso: 'TT', name: 'Trinidad and Tobago', dial: '+1868' },\r\n { iso: 'TN', name: 'Tunisia', dial: '+216' },\r\n { iso: 'TR', name: 'Turkey', dial: '+90' },\r\n { iso: 'TM', name: 'Turkmenistan', dial: '+993' },\r\n { iso: 'TV', name: 'Tuvalu', dial: '+688' },\r\n { iso: 'UG', name: 'Uganda', dial: '+256' },\r\n { iso: 'UA', name: 'Ukraine', dial: '+380' },\r\n { iso: 'AE', name: 'United Arab Emirates', dial: '+971' },\r\n { iso: 'GB', name: 'United Kingdom', dial: '+44' },\r\n { iso: 'UY', name: 'Uruguay', dial: '+598' },\r\n { iso: 'UZ', name: 'Uzbekistan', dial: '+998' },\r\n { iso: 'VU', name: 'Vanuatu', dial: '+678' },\r\n { iso: 'VE', name: 'Venezuela', dial: '+58' },\r\n { iso: 'VN', name: 'Vietnam', dial: '+84' },\r\n { iso: 'YE', name: 'Yemen', dial: '+967' },\r\n { iso: 'ZM', name: 'Zambia', dial: '+260' },\r\n { iso: 'ZW', name: 'Zimbabwe', dial: '+263' },\r\n];\r\n\r\n// Sorted by dial code length desc for correct prefix matching\r\nconst SORTED_BY_DIAL_LENGTH = [...COUNTRIES].sort(\r\n (a, b) => b.dial.length - a.dial.length\r\n);\r\n\r\nconst DEFAULT_COUNTRY = COUNTRIES[0]; // Brasil\r\n\r\nexport function parsePhoneValue(value: string): { country: Country; number: string } {\r\n if (!value) return { country: DEFAULT_COUNTRY, number: '' };\r\n for (const country of SORTED_BY_DIAL_LENGTH) {\r\n const prefix = country.dial + ' ';\r\n if (value.startsWith(prefix)) {\r\n return { country, number: value.slice(prefix.length) };\r\n }\r\n }\r\n return { country: DEFAULT_COUNTRY, number: value };\r\n}\r\n"],"mappings":"AAMO,SAAS,QAAQ,KAAqB;AAC3C,SAAO,mDAAmD,IAAI,YAAY,CAAC;AAC7E;AAEO,MAAM,YAAuB;AAAA,EAClC,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,MAAM;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,iBAAiB,MAAM,KAAK;AAAA,EAC/C,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,OAAO;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,eAAe,MAAM,MAAM;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,uBAAuB,MAAM,QAAQ;AAAA,EACxD,EAAE,KAAK,MAAM,MAAM,aAAa,MAAM,MAAM;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,aAAa,MAAM,MAAM;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,MAAM;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,cAAc,MAAM,OAAO;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,QAAQ;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,cAAc,MAAM,OAAO;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,QAAQ;AAAA,EAC7C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,MAAM;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,0BAA0B,MAAM,OAAO;AAAA,EAC1D,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,OAAO;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,OAAO;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,gBAAgB,MAAM,OAAO;AAAA,EAChD,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,OAAO;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,OAAO;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,KAAK;AAAA,EACxC,EAAE,KAAK,MAAM,MAAM,cAAc,MAAM,OAAO;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,4BAA4B,MAAM,OAAO;AAAA,EAC5D,EAAE,KAAK,MAAM,MAAM,QAAQ,MAAM,OAAO;AAAA,EACxC,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,MAAM;AAAA,EACxC,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,MAAM;AAAA,EACxC,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,MAAM;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,cAAc,MAAM,OAAO;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,cAAc,MAAM,OAAO;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,QAAQ,MAAM,MAAM;AAAA,EACvC,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,kBAAkB,MAAM,OAAO;AAAA,EAClD,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,MAAM;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,OAAO;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,QAAQ;AAAA,EAC7C,EAAE,KAAK,MAAM,MAAM,sBAAsB,MAAM,QAAQ;AAAA,EACvD,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,MAAM;AAAA,EACxC,EAAE,KAAK,MAAM,MAAM,eAAe,MAAM,OAAO;AAAA,EAC/C,EAAE,KAAK,MAAM,MAAM,qBAAqB,MAAM,OAAO;AAAA,EACrD,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,OAAO;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,OAAO;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,QAAQ,MAAM,OAAO;AAAA,EACxC,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,MAAM;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,MAAM;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,MAAM;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,QAAQ;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,aAAa,MAAM,OAAO;AAAA,EAC7C,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,iBAAiB,MAAM,OAAO;AAAA,EACjD,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,OAAO;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,MAAM;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,MAAM;AAAA,EACxC,EAAE,KAAK,MAAM,MAAM,aAAa,MAAM,MAAM;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,QAAQ,MAAM,MAAM;AAAA,EACvC,EAAE,KAAK,MAAM,MAAM,QAAQ,MAAM,OAAO;AAAA,EACxC,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,MAAM;AAAA,EACxC,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,QAAQ;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,MAAM;AAAA,EACxC,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,cAAc,MAAM,KAAK;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,OAAO;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,cAAc,MAAM,OAAO;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,QAAQ,MAAM,OAAO;AAAA,EACxC,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,iBAAiB,MAAM,OAAO;AAAA,EACjD,EAAE,KAAK,MAAM,MAAM,aAAa,MAAM,OAAO;AAAA,EAC7C,EAAE,KAAK,MAAM,MAAM,cAAc,MAAM,OAAO;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,cAAc,MAAM,OAAO;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,MAAM;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,OAAO;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,QAAQ,MAAM,OAAO;AAAA,EACxC,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,oBAAoB,MAAM,OAAO;AAAA,EACpD,EAAE,KAAK,MAAM,MAAM,cAAc,MAAM,OAAO;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,aAAa,MAAM,OAAO;AAAA,EAC7C,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,MAAM;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,cAAc,MAAM,OAAO;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,OAAO;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,cAAc,MAAM,OAAO;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,cAAc,MAAM,OAAO;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,MAAM;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,eAAe,MAAM,MAAM;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,eAAe,MAAM,MAAM;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,aAAa,MAAM,OAAO;AAAA,EAC7C,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,eAAe,MAAM,OAAO;AAAA,EAC/C,EAAE,KAAK,MAAM,MAAM,mBAAmB,MAAM,OAAO;AAAA,EACnD,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,MAAM;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,QAAQ,MAAM,OAAO;AAAA,EACxC,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,MAAM;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,aAAa,MAAM,OAAO;AAAA,EAC7C,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,oBAAoB,MAAM,OAAO;AAAA,EACpD,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,OAAO;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,QAAQ,MAAM,MAAM;AAAA,EACvC,EAAE,KAAK,MAAM,MAAM,eAAe,MAAM,MAAM;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,MAAM;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,MAAM;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,KAAK;AAAA,EACxC,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,yBAAyB,MAAM,QAAQ;AAAA,EAC1D,EAAE,KAAK,MAAM,MAAM,eAAe,MAAM,QAAQ;AAAA,EAChD,EAAE,KAAK,MAAM,MAAM,oCAAoC,MAAM,QAAQ;AAAA,EACrE,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,cAAc,MAAM,OAAO;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,kCAAyB,MAAM,OAAO;AAAA,EACzD,EAAE,KAAK,MAAM,MAAM,gBAAgB,MAAM,OAAO;AAAA,EAChD,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,cAAc,MAAM,OAAO;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,gBAAgB,MAAM,OAAO;AAAA,EAChD,EAAE,KAAK,MAAM,MAAM,aAAa,MAAM,MAAM;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,OAAO;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,OAAO;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,mBAAmB,MAAM,OAAO;AAAA,EACnD,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,gBAAgB,MAAM,MAAM;AAAA,EAC/C,EAAE,KAAK,MAAM,MAAM,eAAe,MAAM,MAAM;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,eAAe,MAAM,OAAO;AAAA,EAC/C,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,MAAM;AAAA,EACxC,EAAE,KAAK,MAAM,MAAM,aAAa,MAAM,MAAM;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,OAAO;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,MAAM;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,eAAe,MAAM,MAAM;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,cAAc,MAAM,OAAO;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,OAAO;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,MAAM;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,eAAe,MAAM,OAAO;AAAA,EAC/C,EAAE,KAAK,MAAM,MAAM,QAAQ,MAAM,OAAO;AAAA,EACxC,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,uBAAuB,MAAM,QAAQ;AAAA,EACxD,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,MAAM;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,gBAAgB,MAAM,OAAO;AAAA,EAChD,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,wBAAwB,MAAM,OAAO;AAAA,EACxD,EAAE,KAAK,MAAM,MAAM,kBAAkB,MAAM,MAAM;AAAA,EACjD,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,cAAc,MAAM,OAAO;AAAA,EAC9C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,OAAO;AAAA,EAC3C,EAAE,KAAK,MAAM,MAAM,aAAa,MAAM,MAAM;AAAA,EAC5C,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,MAAM;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,EACzC,EAAE,KAAK,MAAM,MAAM,UAAU,MAAM,OAAO;AAAA,EAC1C,EAAE,KAAK,MAAM,MAAM,YAAY,MAAM,OAAO;AAC9C;AAGA,MAAM,wBAAwB,CAAC,GAAG,SAAS,EAAE;AAAA,EAC3C,CAAC,GAAG,MAAM,EAAE,KAAK,SAAS,EAAE,KAAK;AACnC;AAEA,MAAM,kBAAkB,UAAU,CAAC;AAE5B,SAAS,gBAAgB,OAAqD;AACnF,MAAI,CAAC,MAAO,QAAO,EAAE,SAAS,iBAAiB,QAAQ,GAAG;AAC1D,aAAW,WAAW,uBAAuB;AAC3C,UAAM,SAAS,QAAQ,OAAO;AAC9B,QAAI,MAAM,WAAW,MAAM,GAAG;AAC5B,aAAO,EAAE,SAAS,QAAQ,MAAM,MAAM,OAAO,MAAM,EAAE;AAAA,IACvD;AAAA,EACF;AACA,SAAO,EAAE,SAAS,iBAAiB,QAAQ,MAAM;AACnD;","names":[]}
1
+ {"version":3,"sources":["../../src/utils/countries.ts"],"sourcesContent":["export interface Country {\n iso: string;\n name: string;\n dial: string;\n}\n\nexport function flagUrl(iso: string): string {\n return `https://hatscripts.github.io/circle-flags/flags/${iso.toLowerCase()}.svg`;\n}\n\nexport const COUNTRIES: Country[] = [\n { iso: 'BR', name: 'Brasil', dial: '+55' },\n { iso: 'US', name: 'United States', dial: '+1' },\n { iso: 'PT', name: 'Portugal', dial: '+351' },\n { iso: 'AF', name: 'Afghanistan', dial: '+93' },\n { iso: 'AL', name: 'Albania', dial: '+355' },\n { iso: 'DZ', name: 'Algeria', dial: '+213' },\n { iso: 'AD', name: 'Andorra', dial: '+376' },\n { iso: 'AO', name: 'Angola', dial: '+244' },\n { iso: 'AG', name: 'Antigua and Barbuda', dial: '+1268' },\n { iso: 'AR', name: 'Argentina', dial: '+54' },\n { iso: 'AM', name: 'Armenia', dial: '+374' },\n { iso: 'AU', name: 'Australia', dial: '+61' },\n { iso: 'AT', name: 'Austria', dial: '+43' },\n { iso: 'AZ', name: 'Azerbaijan', dial: '+994' },\n { iso: 'BS', name: 'Bahamas', dial: '+1242' },\n { iso: 'BH', name: 'Bahrain', dial: '+973' },\n { iso: 'BD', name: 'Bangladesh', dial: '+880' },\n { iso: 'BB', name: 'Barbados', dial: '+1246' },\n { iso: 'BY', name: 'Belarus', dial: '+375' },\n { iso: 'BE', name: 'Belgium', dial: '+32' },\n { iso: 'BZ', name: 'Belize', dial: '+501' },\n { iso: 'BJ', name: 'Benin', dial: '+229' },\n { iso: 'BT', name: 'Bhutan', dial: '+975' },\n { iso: 'BO', name: 'Bolivia', dial: '+591' },\n { iso: 'BA', name: 'Bosnia and Herzegovina', dial: '+387' },\n { iso: 'BW', name: 'Botswana', dial: '+267' },\n { iso: 'BN', name: 'Brunei', dial: '+673' },\n { iso: 'BG', name: 'Bulgaria', dial: '+359' },\n { iso: 'BF', name: 'Burkina Faso', dial: '+226' },\n { iso: 'BI', name: 'Burundi', dial: '+257' },\n { iso: 'KH', name: 'Cambodia', dial: '+855' },\n { iso: 'CM', name: 'Cameroon', dial: '+237' },\n { iso: 'CA', name: 'Canada', dial: '+1' },\n { iso: 'CV', name: 'Cape Verde', dial: '+238' },\n { iso: 'CF', name: 'Central African Republic', dial: '+236' },\n { iso: 'TD', name: 'Chad', dial: '+235' },\n { iso: 'CL', name: 'Chile', dial: '+56' },\n { iso: 'CN', name: 'China', dial: '+86' },\n { iso: 'CO', name: 'Colombia', dial: '+57' },\n { iso: 'KM', name: 'Comoros', dial: '+269' },\n { iso: 'CG', name: 'Congo', dial: '+242' },\n { iso: 'CD', name: 'Congo (DR)', dial: '+243' },\n { iso: 'CR', name: 'Costa Rica', dial: '+506' },\n { iso: 'HR', name: 'Croatia', dial: '+385' },\n { iso: 'CU', name: 'Cuba', dial: '+53' },\n { iso: 'CY', name: 'Cyprus', dial: '+357' },\n { iso: 'CZ', name: 'Czech Republic', dial: '+420' },\n { iso: 'DK', name: 'Denmark', dial: '+45' },\n { iso: 'DJ', name: 'Djibouti', dial: '+253' },\n { iso: 'DM', name: 'Dominica', dial: '+1767' },\n { iso: 'DO', name: 'Dominican Republic', dial: '+1809' },\n { iso: 'EC', name: 'Ecuador', dial: '+593' },\n { iso: 'EG', name: 'Egypt', dial: '+20' },\n { iso: 'SV', name: 'El Salvador', dial: '+503' },\n { iso: 'GQ', name: 'Equatorial Guinea', dial: '+240' },\n { iso: 'ER', name: 'Eritrea', dial: '+291' },\n { iso: 'EE', name: 'Estonia', dial: '+372' },\n { iso: 'SZ', name: 'Eswatini', dial: '+268' },\n { iso: 'ET', name: 'Ethiopia', dial: '+251' },\n { iso: 'FJ', name: 'Fiji', dial: '+679' },\n { iso: 'FI', name: 'Finland', dial: '+358' },\n { iso: 'FR', name: 'France', dial: '+33' },\n { iso: 'GA', name: 'Gabon', dial: '+241' },\n { iso: 'GM', name: 'Gambia', dial: '+220' },\n { iso: 'GE', name: 'Georgia', dial: '+995' },\n { iso: 'DE', name: 'Germany', dial: '+49' },\n { iso: 'GH', name: 'Ghana', dial: '+233' },\n { iso: 'GR', name: 'Greece', dial: '+30' },\n { iso: 'GD', name: 'Grenada', dial: '+1473' },\n { iso: 'GT', name: 'Guatemala', dial: '+502' },\n { iso: 'GN', name: 'Guinea', dial: '+224' },\n { iso: 'GW', name: 'Guinea-Bissau', dial: '+245' },\n { iso: 'GY', name: 'Guyana', dial: '+592' },\n { iso: 'HT', name: 'Haiti', dial: '+509' },\n { iso: 'HN', name: 'Honduras', dial: '+504' },\n { iso: 'HU', name: 'Hungary', dial: '+36' },\n { iso: 'IS', name: 'Iceland', dial: '+354' },\n { iso: 'IN', name: 'India', dial: '+91' },\n { iso: 'ID', name: 'Indonesia', dial: '+62' },\n { iso: 'IR', name: 'Iran', dial: '+98' },\n { iso: 'IQ', name: 'Iraq', dial: '+964' },\n { iso: 'IE', name: 'Ireland', dial: '+353' },\n { iso: 'IL', name: 'Israel', dial: '+972' },\n { iso: 'IT', name: 'Italy', dial: '+39' },\n { iso: 'JM', name: 'Jamaica', dial: '+1876' },\n { iso: 'JP', name: 'Japan', dial: '+81' },\n { iso: 'JO', name: 'Jordan', dial: '+962' },\n { iso: 'KZ', name: 'Kazakhstan', dial: '+7' },\n { iso: 'KE', name: 'Kenya', dial: '+254' },\n { iso: 'KI', name: 'Kiribati', dial: '+686' },\n { iso: 'KW', name: 'Kuwait', dial: '+965' },\n { iso: 'KG', name: 'Kyrgyzstan', dial: '+996' },\n { iso: 'LA', name: 'Laos', dial: '+856' },\n { iso: 'LV', name: 'Latvia', dial: '+371' },\n { iso: 'LB', name: 'Lebanon', dial: '+961' },\n { iso: 'LS', name: 'Lesotho', dial: '+266' },\n { iso: 'LR', name: 'Liberia', dial: '+231' },\n { iso: 'LY', name: 'Libya', dial: '+218' },\n { iso: 'LI', name: 'Liechtenstein', dial: '+423' },\n { iso: 'LT', name: 'Lithuania', dial: '+370' },\n { iso: 'LU', name: 'Luxembourg', dial: '+352' },\n { iso: 'MG', name: 'Madagascar', dial: '+261' },\n { iso: 'MW', name: 'Malawi', dial: '+265' },\n { iso: 'MY', name: 'Malaysia', dial: '+60' },\n { iso: 'MV', name: 'Maldives', dial: '+960' },\n { iso: 'ML', name: 'Mali', dial: '+223' },\n { iso: 'MT', name: 'Malta', dial: '+356' },\n { iso: 'MH', name: 'Marshall Islands', dial: '+692' },\n { iso: 'MR', name: 'Mauritania', dial: '+222' },\n { iso: 'MU', name: 'Mauritius', dial: '+230' },\n { iso: 'MX', name: 'Mexico', dial: '+52' },\n { iso: 'FM', name: 'Micronesia', dial: '+691' },\n { iso: 'MD', name: 'Moldova', dial: '+373' },\n { iso: 'MC', name: 'Monaco', dial: '+377' },\n { iso: 'MN', name: 'Mongolia', dial: '+976' },\n { iso: 'ME', name: 'Montenegro', dial: '+382' },\n { iso: 'MA', name: 'Morocco', dial: '+212' },\n { iso: 'MZ', name: 'Mozambique', dial: '+258' },\n { iso: 'MM', name: 'Myanmar', dial: '+95' },\n { iso: 'NA', name: 'Namibia', dial: '+264' },\n { iso: 'NR', name: 'Nauru', dial: '+674' },\n { iso: 'NP', name: 'Nepal', dial: '+977' },\n { iso: 'NL', name: 'Netherlands', dial: '+31' },\n { iso: 'NZ', name: 'New Zealand', dial: '+64' },\n { iso: 'NI', name: 'Nicaragua', dial: '+505' },\n { iso: 'NE', name: 'Niger', dial: '+227' },\n { iso: 'NG', name: 'Nigeria', dial: '+234' },\n { iso: 'KP', name: 'North Korea', dial: '+850' },\n { iso: 'MK', name: 'North Macedonia', dial: '+389' },\n { iso: 'NO', name: 'Norway', dial: '+47' },\n { iso: 'OM', name: 'Oman', dial: '+968' },\n { iso: 'PK', name: 'Pakistan', dial: '+92' },\n { iso: 'PW', name: 'Palau', dial: '+680' },\n { iso: 'PS', name: 'Palestine', dial: '+970' },\n { iso: 'PA', name: 'Panama', dial: '+507' },\n { iso: 'PG', name: 'Papua New Guinea', dial: '+675' },\n { iso: 'PY', name: 'Paraguay', dial: '+595' },\n { iso: 'PE', name: 'Peru', dial: '+51' },\n { iso: 'PH', name: 'Philippines', dial: '+63' },\n { iso: 'PL', name: 'Poland', dial: '+48' },\n { iso: 'QA', name: 'Qatar', dial: '+974' },\n { iso: 'RO', name: 'Romania', dial: '+40' },\n { iso: 'RU', name: 'Russia', dial: '+7' },\n { iso: 'RW', name: 'Rwanda', dial: '+250' },\n { iso: 'KN', name: 'Saint Kitts and Nevis', dial: '+1869' },\n { iso: 'LC', name: 'Saint Lucia', dial: '+1758' },\n { iso: 'VC', name: 'Saint Vincent and the Grenadines', dial: '+1784' },\n { iso: 'WS', name: 'Samoa', dial: '+685' },\n { iso: 'SM', name: 'San Marino', dial: '+378' },\n { iso: 'ST', name: 'São Tomé and Príncipe', dial: '+239' },\n { iso: 'SA', name: 'Saudi Arabia', dial: '+966' },\n { iso: 'SN', name: 'Senegal', dial: '+221' },\n { iso: 'RS', name: 'Serbia', dial: '+381' },\n { iso: 'SC', name: 'Seychelles', dial: '+248' },\n { iso: 'SL', name: 'Sierra Leone', dial: '+232' },\n { iso: 'SG', name: 'Singapore', dial: '+65' },\n { iso: 'SK', name: 'Slovakia', dial: '+421' },\n { iso: 'SI', name: 'Slovenia', dial: '+386' },\n { iso: 'SB', name: 'Solomon Islands', dial: '+677' },\n { iso: 'SO', name: 'Somalia', dial: '+252' },\n { iso: 'ZA', name: 'South Africa', dial: '+27' },\n { iso: 'KR', name: 'South Korea', dial: '+82' },\n { iso: 'SS', name: 'South Sudan', dial: '+211' },\n { iso: 'ES', name: 'Spain', dial: '+34' },\n { iso: 'LK', name: 'Sri Lanka', dial: '+94' },\n { iso: 'SD', name: 'Sudan', dial: '+249' },\n { iso: 'SR', name: 'Suriname', dial: '+597' },\n { iso: 'SE', name: 'Sweden', dial: '+46' },\n { iso: 'CH', name: 'Switzerland', dial: '+41' },\n { iso: 'SY', name: 'Syria', dial: '+963' },\n { iso: 'TW', name: 'Taiwan', dial: '+886' },\n { iso: 'TJ', name: 'Tajikistan', dial: '+992' },\n { iso: 'TZ', name: 'Tanzania', dial: '+255' },\n { iso: 'TH', name: 'Thailand', dial: '+66' },\n { iso: 'TL', name: 'Timor-Leste', dial: '+670' },\n { iso: 'TG', name: 'Togo', dial: '+228' },\n { iso: 'TO', name: 'Tonga', dial: '+676' },\n { iso: 'TT', name: 'Trinidad and Tobago', dial: '+1868' },\n { iso: 'TN', name: 'Tunisia', dial: '+216' },\n { iso: 'TR', name: 'Turkey', dial: '+90' },\n { iso: 'TM', name: 'Turkmenistan', dial: '+993' },\n { iso: 'TV', name: 'Tuvalu', dial: '+688' },\n { iso: 'UG', name: 'Uganda', dial: '+256' },\n { iso: 'UA', name: 'Ukraine', dial: '+380' },\n { iso: 'AE', name: 'United Arab Emirates', dial: '+971' },\n { iso: 'GB', name: 'United Kingdom', dial: '+44' },\n { iso: 'UY', name: 'Uruguay', dial: '+598' },\n { iso: 'UZ', name: 'Uzbekistan', dial: '+998' },\n { iso: 'VU', name: 'Vanuatu', dial: '+678' },\n { iso: 'VE', name: 'Venezuela', dial: '+58' },\n { iso: 'VN', name: 'Vietnam', dial: '+84' },\n { iso: 'YE', name: 'Yemen', dial: '+967' },\n { iso: 'ZM', name: 'Zambia', dial: '+260' },\n { iso: 'ZW', name: 'Zimbabwe', dial: '+263' },\n];\n\n// Sorted by dial code length desc for correct prefix matching\nconst SORTED_BY_DIAL_LENGTH = [...COUNTRIES].sort(\n (a, b) => b.dial.length - a.dial.length\n);\n\nconst DEFAULT_COUNTRY = COUNTRIES[0]; // Brasil\n\nexport function parsePhoneValue(value: string): { country: Country; number: string } {\n if (!value) return { country: DEFAULT_COUNTRY, number: '' };\n for (const country of SORTED_BY_DIAL_LENGTH) {\n const prefix = country.dial + ' ';\n if (value.startsWith(prefix)) {\n return { country, number: value.slice(prefix.length) };\n }\n }\n return { country: DEFAULT_COUNTRY, number: value };\n}\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/format/currency.ts"],"sourcesContent":["/**\r\n * Moeda de exibição. Espelha getCurrencyForGateway do backend (gapps-r3-api):\r\n * 'stripe_usd' → USD; demais gateways → BRL.\r\n */\r\nexport type CurrencyCode = 'brl' | 'usd';\r\n\r\nconst CURRENCY_FORMAT: Record<CurrencyCode, { locale: string; currency: string }> = {\r\n brl: { locale: 'pt-BR', currency: 'BRL' },\r\n usd: { locale: 'en-US', currency: 'USD' },\r\n};\r\n\r\n/**\r\n * Deriva a moeda de exibição a partir do gateway da conta.\r\n * A moeda é definida pelo backend no roteamento de gateway — read-only para o usuário.\r\n * @param gateway - account.gateway ('stripe_usd' | 'stripe_brl' | 'vindi' | ...)\r\n */\r\nexport const getCurrencyForGateway = (gateway?: string | null): CurrencyCode =>\r\n gateway === 'stripe_usd' ? 'usd' : 'brl';\r\n\r\n/**\r\n * Formata um valor (string ou número) como moeda.\r\n * String: assume centavos (remove não-dígitos e divide por 100) — comportamento legado.\r\n * @param value - valor a formatar\r\n * @param currency - moeda de exibição (padrão 'brl' por retrocompatibilidade)\r\n * @returns String formatada (ex: \"R$ 1.234,56\" ou \"$1,234.56\")\r\n */\r\nexport const formatCurrency = (value: string | number, currency: CurrencyCode = 'brl'): string => {\r\n const fmt = CURRENCY_FORMAT[currency];\r\n if (typeof value === 'number') {\r\n return value.toLocaleString(fmt.locale, {\r\n style: 'currency',\r\n currency: fmt.currency,\r\n });\r\n }\r\n\r\n const numericValue = value.replace(/\\D/g, '');\r\n const numberValue = parseFloat(numericValue) / 100;\r\n return numberValue.toLocaleString(fmt.locale, {\r\n style: 'currency',\r\n currency: fmt.currency,\r\n });\r\n};\r\n\r\n/**\r\n * Converte uma string de moeda para número (centavos / 100). Independente de moeda.\r\n * @param value - String com valor de moeda\r\n * @returns Número decimal\r\n */\r\nexport const parseCurrencyToNumber = (value: string): number => {\r\n const numericValue = value.replace(/\\D/g, '');\r\n return parseFloat(numericValue) / 100;\r\n};\r\n\r\n/**\r\n * Formata um número (opcional) como moeda.\r\n * @param value - Número a formatar (pode ser undefined/null → 0)\r\n * @param decimals - Casas decimais (padrão 2)\r\n * @param currency - Moeda de exibição (padrão 'brl' por retrocompatibilidade)\r\n * @returns String formatada (ex: \"R$ 1.234,56\" ou \"$1,234.56\")\r\n */\r\nexport const formatCurrencyNumber = (value?: number | null, decimals = 2, currency: CurrencyCode = 'brl'): string => {\r\n const safeValue = value ?? 0;\r\n const fmt = CURRENCY_FORMAT[currency];\r\n return safeValue.toLocaleString(fmt.locale, {\r\n style: 'currency',\r\n currency: fmt.currency,\r\n minimumFractionDigits: decimals,\r\n maximumFractionDigits: decimals,\r\n });\r\n};\r\n"],"mappings":"AAMA,MAAM,kBAA8E;AAAA,EAClF,KAAK,EAAE,QAAQ,SAAS,UAAU,MAAM;AAAA,EACxC,KAAK,EAAE,QAAQ,SAAS,UAAU,MAAM;AAC1C;AAOO,MAAM,wBAAwB,CAAC,YACpC,YAAY,eAAe,QAAQ;AAS9B,MAAM,iBAAiB,CAAC,OAAwB,WAAyB,UAAkB;AAChG,QAAM,MAAM,gBAAgB,QAAQ;AACpC,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,MAAM,eAAe,IAAI,QAAQ;AAAA,MACtC,OAAO;AAAA,MACP,UAAU,IAAI;AAAA,IAChB,CAAC;AAAA,EACH;AAEA,QAAM,eAAe,MAAM,QAAQ,OAAO,EAAE;AAC5C,QAAM,cAAc,WAAW,YAAY,IAAI;AAC/C,SAAO,YAAY,eAAe,IAAI,QAAQ;AAAA,IAC5C,OAAO;AAAA,IACP,UAAU,IAAI;AAAA,EAChB,CAAC;AACH;AAOO,MAAM,wBAAwB,CAAC,UAA0B;AAC9D,QAAM,eAAe,MAAM,QAAQ,OAAO,EAAE;AAC5C,SAAO,WAAW,YAAY,IAAI;AACpC;AASO,MAAM,uBAAuB,CAAC,OAAuB,WAAW,GAAG,WAAyB,UAAkB;AACnH,QAAM,YAAY,SAAS;AAC3B,QAAM,MAAM,gBAAgB,QAAQ;AACpC,SAAO,UAAU,eAAe,IAAI,QAAQ;AAAA,IAC1C,OAAO;AAAA,IACP,UAAU,IAAI;AAAA,IACd,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,EACzB,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../../src/utils/format/currency.ts"],"sourcesContent":["/**\n * Moeda de exibição. Espelha getCurrencyForGateway do backend (gapps-r3-api):\n * 'stripe_usd' → USD; demais gateways → BRL.\n */\nexport type CurrencyCode = 'brl' | 'usd';\n\nconst CURRENCY_FORMAT: Record<CurrencyCode, { locale: string; currency: string }> = {\n brl: { locale: 'pt-BR', currency: 'BRL' },\n usd: { locale: 'en-US', currency: 'USD' },\n};\n\n/**\n * Deriva a moeda de exibição a partir do gateway da conta.\n * A moeda é definida pelo backend no roteamento de gateway — read-only para o usuário.\n * @param gateway - account.gateway ('stripe_usd' | 'stripe_brl' | 'vindi' | ...)\n */\nexport const getCurrencyForGateway = (gateway?: string | null): CurrencyCode =>\n gateway === 'stripe_usd' ? 'usd' : 'brl';\n\n/**\n * Formata um valor (string ou número) como moeda.\n * String: assume centavos (remove não-dígitos e divide por 100) — comportamento legado.\n * @param value - valor a formatar\n * @param currency - moeda de exibição (padrão 'brl' por retrocompatibilidade)\n * @returns String formatada (ex: \"R$ 1.234,56\" ou \"$1,234.56\")\n */\nexport const formatCurrency = (value: string | number, currency: CurrencyCode = 'brl'): string => {\n const fmt = CURRENCY_FORMAT[currency];\n if (typeof value === 'number') {\n return value.toLocaleString(fmt.locale, {\n style: 'currency',\n currency: fmt.currency,\n });\n }\n\n const numericValue = value.replace(/\\D/g, '');\n const numberValue = parseFloat(numericValue) / 100;\n return numberValue.toLocaleString(fmt.locale, {\n style: 'currency',\n currency: fmt.currency,\n });\n};\n\n/**\n * Converte uma string de moeda para número (centavos / 100). Independente de moeda.\n * @param value - String com valor de moeda\n * @returns Número decimal\n */\nexport const parseCurrencyToNumber = (value: string): number => {\n const numericValue = value.replace(/\\D/g, '');\n return parseFloat(numericValue) / 100;\n};\n\n/**\n * Formata um número (opcional) como moeda.\n * @param value - Número a formatar (pode ser undefined/null → 0)\n * @param decimals - Casas decimais (padrão 2)\n * @param currency - Moeda de exibição (padrão 'brl' por retrocompatibilidade)\n * @returns String formatada (ex: \"R$ 1.234,56\" ou \"$1,234.56\")\n */\nexport const formatCurrencyNumber = (value?: number | null, decimals = 2, currency: CurrencyCode = 'brl'): string => {\n const safeValue = value ?? 0;\n const fmt = CURRENCY_FORMAT[currency];\n return safeValue.toLocaleString(fmt.locale, {\n style: 'currency',\n currency: fmt.currency,\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n};\n"],"mappings":"AAMA,MAAM,kBAA8E;AAAA,EAClF,KAAK,EAAE,QAAQ,SAAS,UAAU,MAAM;AAAA,EACxC,KAAK,EAAE,QAAQ,SAAS,UAAU,MAAM;AAC1C;AAOO,MAAM,wBAAwB,CAAC,YACpC,YAAY,eAAe,QAAQ;AAS9B,MAAM,iBAAiB,CAAC,OAAwB,WAAyB,UAAkB;AAChG,QAAM,MAAM,gBAAgB,QAAQ;AACpC,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,MAAM,eAAe,IAAI,QAAQ;AAAA,MACtC,OAAO;AAAA,MACP,UAAU,IAAI;AAAA,IAChB,CAAC;AAAA,EACH;AAEA,QAAM,eAAe,MAAM,QAAQ,OAAO,EAAE;AAC5C,QAAM,cAAc,WAAW,YAAY,IAAI;AAC/C,SAAO,YAAY,eAAe,IAAI,QAAQ;AAAA,IAC5C,OAAO;AAAA,IACP,UAAU,IAAI;AAAA,EAChB,CAAC;AACH;AAOO,MAAM,wBAAwB,CAAC,UAA0B;AAC9D,QAAM,eAAe,MAAM,QAAQ,OAAO,EAAE;AAC5C,SAAO,WAAW,YAAY,IAAI;AACpC;AASO,MAAM,uBAAuB,CAAC,OAAuB,WAAW,GAAG,WAAyB,UAAkB;AACnH,QAAM,YAAY,SAAS;AAC3B,QAAM,MAAM,gBAAgB,QAAQ;AACpC,SAAO,UAAU,eAAe,IAAI,QAAQ;AAAA,IAC1C,OAAO;AAAA,IACP,UAAU,IAAI;AAAA,IACd,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,EACzB,CAAC;AACH;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/intl/cookie-domain.ts"],"sourcesContent":["/**\r\n * Deriva o domínio de cookie compartilhável entre subdomínios a partir do domínio do\r\n * whitelabel (ex.: `https://app.greatpages.com.br` → `.app.greatpages.com.br`).\r\n *\r\n * Mesma normalização usada pelo cookie de auth `greatapps` (auth.service.normalizeCookieDomain),\r\n * para que o cookie de locale acompanhe o mesmo escopo. Pura (sem APIs de servidor) → client+server.\r\n * Retorna `undefined` para localhost/host inválido (cookie fica host-scoped).\r\n */\r\nexport function cookieDomainFromDomain(domain?: string | null): string | undefined {\r\n if (!domain) return undefined;\r\n\r\n const normalized = domain.trim();\r\n if (!normalized) return undefined;\r\n\r\n let rawHost: string;\r\n try {\r\n rawHost = new URL(normalized).hostname;\r\n } catch {\r\n rawHost = normalized\r\n .replace(/^https?:\\/\\//i, '')\r\n .replace(/^www\\./i, '')\r\n .split('/')[0]\r\n .split(':')[0];\r\n }\r\n\r\n if (!rawHost || rawHost === 'localhost') return undefined;\r\n\r\n return rawHost.startsWith('.') ? rawHost : `.${rawHost}`;\r\n}\r\n"],"mappings":"AAQO,SAAS,uBAAuB,QAA4C;AACjF,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,aAAa,OAAO,KAAK;AAC/B,MAAI,CAAC,WAAY,QAAO;AAExB,MAAI;AACJ,MAAI;AACF,cAAU,IAAI,IAAI,UAAU,EAAE;AAAA,EAChC,QAAQ;AACN,cAAU,WACP,QAAQ,iBAAiB,EAAE,EAC3B,QAAQ,WAAW,EAAE,EACrB,MAAM,GAAG,EAAE,CAAC,EACZ,MAAM,GAAG,EAAE,CAAC;AAAA,EACjB;AAEA,MAAI,CAAC,WAAW,YAAY,YAAa,QAAO;AAEhD,SAAO,QAAQ,WAAW,GAAG,IAAI,UAAU,IAAI,OAAO;AACxD;","names":[]}
1
+ {"version":3,"sources":["../../../src/utils/intl/cookie-domain.ts"],"sourcesContent":["/**\n * Deriva o domínio de cookie compartilhável entre subdomínios a partir do domínio do\n * whitelabel (ex.: `https://app.greatpages.com.br` → `.app.greatpages.com.br`).\n *\n * Mesma normalização usada pelo cookie de auth `greatapps` (auth.service.normalizeCookieDomain),\n * para que o cookie de locale acompanhe o mesmo escopo. Pura (sem APIs de servidor) → client+server.\n * Retorna `undefined` para localhost/host inválido (cookie fica host-scoped).\n */\nexport function cookieDomainFromDomain(domain?: string | null): string | undefined {\n if (!domain) return undefined;\n\n const normalized = domain.trim();\n if (!normalized) return undefined;\n\n let rawHost: string;\n try {\n rawHost = new URL(normalized).hostname;\n } catch {\n rawHost = normalized\n .replace(/^https?:\\/\\//i, '')\n .replace(/^www\\./i, '')\n .split('/')[0]\n .split(':')[0];\n }\n\n if (!rawHost || rawHost === 'localhost') return undefined;\n\n return rawHost.startsWith('.') ? rawHost : `.${rawHost}`;\n}\n"],"mappings":"AAQO,SAAS,uBAAuB,QAA4C;AACjF,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,aAAa,OAAO,KAAK;AAC/B,MAAI,CAAC,WAAY,QAAO;AAExB,MAAI;AACJ,MAAI;AACF,cAAU,IAAI,IAAI,UAAU,EAAE;AAAA,EAChC,QAAQ;AACN,cAAU,WACP,QAAQ,iBAAiB,EAAE,EAC3B,QAAQ,WAAW,EAAE,EACrB,MAAM,GAAG,EAAE,CAAC,EACZ,MAAM,GAAG,EAAE,CAAC;AAAA,EACjB;AAEA,MAAI,CAAC,WAAW,YAAY,YAAa,QAAO;AAEhD,SAAO,QAAQ,WAAW,GAAG,IAAI,UAAU,IAAI,OAAO;AACxD;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/intl/locale-cookie.ts"],"sourcesContent":["import { LOCALE_COOKIE } from '../../i18n/config';\r\nimport { cookieDomainFromDomain } from './cookie-domain';\r\n\r\nconst ONE_YEAR = 60 * 60 * 24 * 365;\r\n\r\n/**\r\n * Persiste o locale escolhido no cookie `NEXT_LOCALE` (lido por `resolveLocale` no servidor).\r\n *\r\n * Passe `whitelabelDomain` (de `useWhitelabel().whitelabel?.domain`) para o cookie ser\r\n * compartilhado entre subdomínios (accounts. → pages. → apps.), no mesmo escopo do cookie\r\n * de auth. Sem ele, o cookie fica host-scoped.\r\n */\r\nexport function setLocaleCookie(locale: string, whitelabelDomain?: string | null): void {\r\n if (typeof document === 'undefined') return;\r\n const domain = cookieDomainFromDomain(whitelabelDomain);\r\n const domainAttr = domain ? `; domain=${domain}` : '';\r\n document.cookie = `${LOCALE_COOKIE}=${locale}; path=/; max-age=${ONE_YEAR}; samesite=lax${domainAttr}`;\r\n}\r\n"],"mappings":"AAAA,SAAS,qBAAqB;AAC9B,SAAS,8BAA8B;AAEvC,MAAM,WAAW,KAAK,KAAK,KAAK;AASzB,SAAS,gBAAgB,QAAgB,kBAAwC;AACtF,MAAI,OAAO,aAAa,YAAa;AACrC,QAAM,SAAS,uBAAuB,gBAAgB;AACtD,QAAM,aAAa,SAAS,YAAY,MAAM,KAAK;AACnD,WAAS,SAAS,GAAG,aAAa,IAAI,MAAM,qBAAqB,QAAQ,iBAAiB,UAAU;AACtG;","names":[]}
1
+ {"version":3,"sources":["../../../src/utils/intl/locale-cookie.ts"],"sourcesContent":["import { LOCALE_COOKIE } from '../../i18n/config';\nimport { cookieDomainFromDomain } from './cookie-domain';\n\nconst ONE_YEAR = 60 * 60 * 24 * 365;\n\n/**\n * Persiste o locale escolhido no cookie `NEXT_LOCALE` (lido por `resolveLocale` no servidor).\n *\n * Passe `whitelabelDomain` (de `useWhitelabel().whitelabel?.domain`) para o cookie ser\n * compartilhado entre subdomínios (accounts. → pages. → apps.), no mesmo escopo do cookie\n * de auth. Sem ele, o cookie fica host-scoped.\n */\nexport function setLocaleCookie(locale: string, whitelabelDomain?: string | null): void {\n if (typeof document === 'undefined') return;\n const domain = cookieDomainFromDomain(whitelabelDomain);\n const domainAttr = domain ? `; domain=${domain}` : '';\n document.cookie = `${LOCALE_COOKIE}=${locale}; path=/; max-age=${ONE_YEAR}; samesite=lax${domainAttr}`;\n}\n"],"mappings":"AAAA,SAAS,qBAAqB;AAC9B,SAAS,8BAA8B;AAEvC,MAAM,WAAW,KAAK,KAAK,KAAK;AASzB,SAAS,gBAAgB,QAAgB,kBAAwC;AACtF,MAAI,OAAO,aAAa,YAAa;AACrC,QAAM,SAAS,uBAAuB,gBAAgB;AACtD,QAAM,aAAa,SAAS,YAAY,MAAM,KAAK;AACnD,WAAS,SAAS,GAAG,aAAa,IAAI,MAAM,qBAAqB,QAAQ,iBAAiB,UAAU;AACtG;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/next-navigation.ts"],"sourcesContent":["export {\r\n usePathname,\r\n useSearchParams,\r\n useParams,\r\n redirect,\r\n notFound,\r\n} from \"next/navigation\";\r\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
1
+ {"version":3,"sources":["../../src/utils/next-navigation.ts"],"sourcesContent":["export {\n usePathname,\n useSearchParams,\n useParams,\n redirect,\n notFound,\n} from \"next/navigation\";\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/redirect.ts"],"sourcesContent":["/**\r\n * Resolve o destino pós-login com proteção contra open redirect.\r\n *\r\n * Só aceita o `redirect` recebido na query quando ele aponta para o MESMO site do\r\n * accounts onde o usuário está — mesmo domínio-base, qualquer subdomínio. Em\r\n * `accounts.greatpages.com.br` libera `*.greatpages.com.br` (editor-new, editor, app…);\r\n * num whitelabel em `accounts.marca.com.br` libera `*.marca.com.br`. Qualquer outro host\r\n * (`evil.com`, `greatpages.com.br.evil.com`) cai no `fallback`.\r\n *\r\n * `currentHostname` é o host do accounts (`window.location.hostname`). O accounts vive\r\n * sempre num subdomínio de 1 nível (`accounts.` / `acc.` / `great-accounts.`), então o\r\n * domínio-base é o host sem o primeiro rótulo.\r\n */\r\nexport function resolveSafeRedirect(\r\n redirect: string | null | undefined,\r\n currentHostname: string,\r\n fallback: string,\r\n): string {\r\n if (!redirect) return fallback;\r\n\r\n // path relativo same-origin — uma barra só (bloqueia `//evil.com` e `/\\evil.com`)\r\n if (redirect[0] === '/' && redirect[1] !== '/' && redirect[1] !== '\\\\') {\r\n return redirect;\r\n }\r\n\r\n let url: URL;\r\n try {\r\n url = new URL(redirect);\r\n } catch {\r\n return fallback;\r\n }\r\n\r\n if (url.protocol !== 'https:' && url.protocol !== 'http:') return fallback;\r\n if (!isSameSite(url.hostname, currentHostname)) return fallback;\r\n\r\n return url.toString();\r\n}\r\n\r\nfunction isSameSite(target: string, current: string): boolean {\r\n const host = target.toLowerCase();\r\n const base = baseDomain(current.toLowerCase());\r\n return host === base || host.endsWith(`.${base}`);\r\n}\r\n\r\n// Sufixos públicos de 2 rótulos (não há PSL completa aqui — só os que aparecem nos domínios\r\n// dos whitelabels). Um host terminando num destes tem o domínio registrável com 1 rótulo a mais.\r\nconst TWO_LABEL_PUBLIC_SUFFIXES = ['com.br', 'net.br', 'org.br', 'dev.br', 'app.br', 'co.uk', 'com.mx', 'com.ar'];\r\n\r\nfunction baseDomain(host: string): string {\r\n const labels = host.split('.');\r\n const publicSuffix = TWO_LABEL_PUBLIC_SUFFIXES.find((s) => host === s || host.endsWith(`.${s}`));\r\n // Domínio registrável = nº de rótulos do sufixo + 1 (ex.: `x.com.br` = 3; `x.app` = 2).\r\n const registrableLabels = (publicSuffix ? publicSuffix.split('.').length : 1) + 1;\r\n // accounts está sempre num subdomínio de 1 nível → base = host sem o 1º rótulo. Mas nunca\r\n // reduz até o domínio registrável ou abaixo (senão `greatpages.com.br` viraria `com.br` e\r\n // liberaria qualquer `*.com.br` — open redirect). Nesse caso exige host exato.\r\n return labels.length > registrableLabels ? labels.slice(1).join('.') : host;\r\n}\r\n\r\n/**\r\n * Devolve `candidate` apenas se ele for uma URL do MESMO host; senão o `fallback`.\r\n *\r\n * Usado no bounce do `/login` de cada app (editor, pages…), que recebe no param a URL\r\n * absoluta da própria página de origem e a repassa ao accounts — match exato de host\r\n * porque o destino esperado é o do próprio app.\r\n */\r\nexport function sameHostOr(\r\n candidate: string | undefined,\r\n host: string,\r\n fallback: string,\r\n): string {\r\n if (!candidate) return fallback;\r\n try {\r\n return new URL(candidate).host === host ? candidate : fallback;\r\n } catch {\r\n return fallback;\r\n }\r\n}\r\n"],"mappings":"AAaO,SAAS,oBACd,UACA,iBACA,UACQ;AACR,MAAI,CAAC,SAAU,QAAO;AAGtB,MAAI,SAAS,CAAC,MAAM,OAAO,SAAS,CAAC,MAAM,OAAO,SAAS,CAAC,MAAM,MAAM;AACtE,WAAO;AAAA,EACT;AAEA,MAAI;AACJ,MAAI;AACF,UAAM,IAAI,IAAI,QAAQ;AAAA,EACxB,QAAQ;AACN,WAAO;AAAA,EACT;AAEA,MAAI,IAAI,aAAa,YAAY,IAAI,aAAa,QAAS,QAAO;AAClE,MAAI,CAAC,WAAW,IAAI,UAAU,eAAe,EAAG,QAAO;AAEvD,SAAO,IAAI,SAAS;AACtB;AAEA,SAAS,WAAW,QAAgB,SAA0B;AAC5D,QAAM,OAAO,OAAO,YAAY;AAChC,QAAM,OAAO,WAAW,QAAQ,YAAY,CAAC;AAC7C,SAAO,SAAS,QAAQ,KAAK,SAAS,IAAI,IAAI,EAAE;AAClD;AAIA,MAAM,4BAA4B,CAAC,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,UAAU,QAAQ;AAEhH,SAAS,WAAW,MAAsB;AACxC,QAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,QAAM,eAAe,0BAA0B,KAAK,CAAC,MAAM,SAAS,KAAK,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC;AAE/F,QAAM,qBAAqB,eAAe,aAAa,MAAM,GAAG,EAAE,SAAS,KAAK;AAIhF,SAAO,OAAO,SAAS,oBAAoB,OAAO,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI;AACzE;AASO,SAAS,WACd,WACA,MACA,UACQ;AACR,MAAI,CAAC,UAAW,QAAO;AACvB,MAAI;AACF,WAAO,IAAI,IAAI,SAAS,EAAE,SAAS,OAAO,YAAY;AAAA,EACxD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/utils/redirect.ts"],"sourcesContent":["/**\n * Resolve o destino pós-login com proteção contra open redirect.\n *\n * Só aceita o `redirect` recebido na query quando ele aponta para o MESMO site do\n * accounts onde o usuário está — mesmo domínio-base, qualquer subdomínio. Em\n * `accounts.greatpages.com.br` libera `*.greatpages.com.br` (editor-new, editor, app…);\n * num whitelabel em `accounts.marca.com.br` libera `*.marca.com.br`. Qualquer outro host\n * (`evil.com`, `greatpages.com.br.evil.com`) cai no `fallback`.\n *\n * `currentHostname` é o host do accounts (`window.location.hostname`). O accounts vive\n * sempre num subdomínio de 1 nível (`accounts.` / `acc.` / `great-accounts.`), então o\n * domínio-base é o host sem o primeiro rótulo.\n */\nexport function resolveSafeRedirect(\n redirect: string | null | undefined,\n currentHostname: string,\n fallback: string,\n): string {\n if (!redirect) return fallback;\n\n // path relativo same-origin — uma barra só (bloqueia `//evil.com` e `/\\evil.com`)\n if (redirect[0] === '/' && redirect[1] !== '/' && redirect[1] !== '\\\\') {\n return redirect;\n }\n\n let url: URL;\n try {\n url = new URL(redirect);\n } catch {\n return fallback;\n }\n\n if (url.protocol !== 'https:' && url.protocol !== 'http:') return fallback;\n if (!isSameSite(url.hostname, currentHostname)) return fallback;\n\n return url.toString();\n}\n\nfunction isSameSite(target: string, current: string): boolean {\n const host = target.toLowerCase();\n const base = baseDomain(current.toLowerCase());\n return host === base || host.endsWith(`.${base}`);\n}\n\n// Sufixos públicos de 2 rótulos (não há PSL completa aqui — só os que aparecem nos domínios\n// dos whitelabels). Um host terminando num destes tem o domínio registrável com 1 rótulo a mais.\nconst TWO_LABEL_PUBLIC_SUFFIXES = ['com.br', 'net.br', 'org.br', 'dev.br', 'app.br', 'co.uk', 'com.mx', 'com.ar'];\n\nfunction baseDomain(host: string): string {\n const labels = host.split('.');\n const publicSuffix = TWO_LABEL_PUBLIC_SUFFIXES.find((s) => host === s || host.endsWith(`.${s}`));\n // Domínio registrável = nº de rótulos do sufixo + 1 (ex.: `x.com.br` = 3; `x.app` = 2).\n const registrableLabels = (publicSuffix ? publicSuffix.split('.').length : 1) + 1;\n // accounts está sempre num subdomínio de 1 nível → base = host sem o 1º rótulo. Mas nunca\n // reduz até o domínio registrável ou abaixo (senão `greatpages.com.br` viraria `com.br` e\n // liberaria qualquer `*.com.br` — open redirect). Nesse caso exige host exato.\n return labels.length > registrableLabels ? labels.slice(1).join('.') : host;\n}\n\n/**\n * Devolve `candidate` apenas se ele for uma URL do MESMO host; senão o `fallback`.\n *\n * Usado no bounce do `/login` de cada app (editor, pages…), que recebe no param a URL\n * absoluta da própria página de origem e a repassa ao accounts — match exato de host\n * porque o destino esperado é o do próprio app.\n */\nexport function sameHostOr(\n candidate: string | undefined,\n host: string,\n fallback: string,\n): string {\n if (!candidate) return fallback;\n try {\n return new URL(candidate).host === host ? candidate : fallback;\n } catch {\n return fallback;\n }\n}\n"],"mappings":"AAaO,SAAS,oBACd,UACA,iBACA,UACQ;AACR,MAAI,CAAC,SAAU,QAAO;AAGtB,MAAI,SAAS,CAAC,MAAM,OAAO,SAAS,CAAC,MAAM,OAAO,SAAS,CAAC,MAAM,MAAM;AACtE,WAAO;AAAA,EACT;AAEA,MAAI;AACJ,MAAI;AACF,UAAM,IAAI,IAAI,QAAQ;AAAA,EACxB,QAAQ;AACN,WAAO;AAAA,EACT;AAEA,MAAI,IAAI,aAAa,YAAY,IAAI,aAAa,QAAS,QAAO;AAClE,MAAI,CAAC,WAAW,IAAI,UAAU,eAAe,EAAG,QAAO;AAEvD,SAAO,IAAI,SAAS;AACtB;AAEA,SAAS,WAAW,QAAgB,SAA0B;AAC5D,QAAM,OAAO,OAAO,YAAY;AAChC,QAAM,OAAO,WAAW,QAAQ,YAAY,CAAC;AAC7C,SAAO,SAAS,QAAQ,KAAK,SAAS,IAAI,IAAI,EAAE;AAClD;AAIA,MAAM,4BAA4B,CAAC,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,UAAU,QAAQ;AAEhH,SAAS,WAAW,MAAsB;AACxC,QAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,QAAM,eAAe,0BAA0B,KAAK,CAAC,MAAM,SAAS,KAAK,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC;AAE/F,QAAM,qBAAqB,eAAe,aAAa,MAAM,GAAG,EAAE,SAAS,KAAK;AAIhF,SAAO,OAAO,SAAS,oBAAoB,OAAO,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI;AACzE;AASO,SAAS,WACd,WACA,MACA,UACQ;AACR,MAAI,CAAC,UAAW,QAAO;AACvB,MAAI;AACF,WAAO,IAAI,IAAI,SAAS,EAAE,SAAS,OAAO,YAAY;AAAA,EACxD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}