@greatapps/common 1.1.674 → 1.1.676

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 (237) hide show
  1. package/dist/components/account/ConfigurationsMyAccountModal.mjs +6 -8
  2. package/dist/components/account/ConfigurationsMyAccountModal.mjs.map +1 -1
  3. package/dist/components/account/ConfirmDeleteAccountModal.mjs +19 -20
  4. package/dist/components/account/ConfirmDeleteAccountModal.mjs.map +1 -1
  5. package/dist/components/account/ConfirmGlobalPreferencesModal.mjs +11 -10
  6. package/dist/components/account/ConfirmGlobalPreferencesModal.mjs.map +1 -1
  7. package/dist/components/account/DeleteAccountModal.mjs +28 -34
  8. package/dist/components/account/DeleteAccountModal.mjs.map +1 -1
  9. package/dist/components/account/DisableTwoFactorAuthModal.mjs +5 -7
  10. package/dist/components/account/DisableTwoFactorAuthModal.mjs.map +1 -1
  11. package/dist/components/account/IsntPossibleDeleteAccountModal.mjs +9 -8
  12. package/dist/components/account/IsntPossibleDeleteAccountModal.mjs.map +1 -1
  13. package/dist/components/account/TwoFactorAuthModal.mjs +23 -22
  14. package/dist/components/account/TwoFactorAuthModal.mjs.map +1 -1
  15. package/dist/components/account/constants.mjs +4 -4
  16. package/dist/components/account/constants.mjs.map +1 -1
  17. package/dist/components/account/hooks/useChangeEmailForm.mjs +3 -5
  18. package/dist/components/account/hooks/useChangeEmailForm.mjs.map +1 -1
  19. package/dist/components/account/hooks/useChangePasswordForm.mjs +3 -26
  20. package/dist/components/account/hooks/useChangePasswordForm.mjs.map +1 -1
  21. package/dist/components/account/hooks/useChangePhoneForm.mjs +9 -18
  22. package/dist/components/account/hooks/useChangePhoneForm.mjs.map +1 -1
  23. package/dist/components/account/hooks/useDisableTwoFactorAuthForm.mjs +3 -26
  24. package/dist/components/account/hooks/useDisableTwoFactorAuthForm.mjs.map +1 -1
  25. package/dist/components/account/hooks/useOtpVerification.mjs +3 -19
  26. package/dist/components/account/hooks/useOtpVerification.mjs.map +1 -1
  27. package/dist/components/account/hooks/useTwoFactorAuthForm.mjs +4 -27
  28. package/dist/components/account/hooks/useTwoFactorAuthForm.mjs.map +1 -1
  29. package/dist/components/account/sections/ChangeEmailModal.mjs +28 -25
  30. package/dist/components/account/sections/ChangeEmailModal.mjs.map +1 -1
  31. package/dist/components/account/sections/ChangePasswordSection.mjs +6 -8
  32. package/dist/components/account/sections/ChangePasswordSection.mjs.map +1 -1
  33. package/dist/components/account/sections/ChangePhoneModal.mjs +27 -24
  34. package/dist/components/account/sections/ChangePhoneModal.mjs.map +1 -1
  35. package/dist/components/account/sections/MyProfileSection.mjs +22 -37
  36. package/dist/components/account/sections/MyProfileSection.mjs.map +1 -1
  37. package/dist/components/account/sections/PreferencesSection.mjs +24 -48
  38. package/dist/components/account/sections/PreferencesSection.mjs.map +1 -1
  39. package/dist/components/account/sections/SecuritySection.mjs +9 -11
  40. package/dist/components/account/sections/SecuritySection.mjs.map +1 -1
  41. package/dist/components/account/sections/TokenSection.mjs +8 -24
  42. package/dist/components/account/sections/TokenSection.mjs.map +1 -1
  43. package/dist/components/layouts/AppMobileNavBar.mjs +148 -2
  44. package/dist/components/layouts/AppMobileNavBar.mjs.map +1 -1
  45. package/dist/components/layouts/NavBar.mjs +3 -5
  46. package/dist/components/layouts/NavBar.mjs.map +1 -1
  47. package/dist/components/layouts/NotificationsPopover.mjs +3 -5
  48. package/dist/components/layouts/NotificationsPopover.mjs.map +1 -1
  49. package/dist/components/layouts/ProfilePopover.mjs +4 -6
  50. package/dist/components/layouts/ProfilePopover.mjs.map +1 -1
  51. package/dist/components/layouts/UsersSelectorPopover.mjs +7 -9
  52. package/dist/components/layouts/UsersSelectorPopover.mjs.map +1 -1
  53. package/dist/components/modals/BuyCreditsModal.mjs +18 -17
  54. package/dist/components/modals/BuyCreditsModal.mjs.map +1 -1
  55. package/dist/components/modals/CreditsDisabledModal.mjs +4 -6
  56. package/dist/components/modals/CreditsDisabledModal.mjs.map +1 -1
  57. package/dist/components/modals/PaidPlanRequiredModal.mjs +3 -5
  58. package/dist/components/modals/PaidPlanRequiredModal.mjs.map +1 -1
  59. package/dist/components/modals/cards/AddCardModal.mjs +24 -27
  60. package/dist/components/modals/cards/AddCardModal.mjs.map +1 -1
  61. package/dist/components/modals/cards/CannotDeleteCardModal.mjs +7 -9
  62. package/dist/components/modals/cards/CannotDeleteCardModal.mjs.map +1 -1
  63. package/dist/components/modals/cards/CardFormFields.mjs +22 -25
  64. package/dist/components/modals/cards/CardFormFields.mjs.map +1 -1
  65. package/dist/components/modals/cards/DeleteCardModal.mjs +8 -10
  66. package/dist/components/modals/cards/DeleteCardModal.mjs.map +1 -1
  67. package/dist/components/navigation/CancelledSubscriptionBanner.mjs +2 -4
  68. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  69. package/dist/components/navigation/OverdueInvoiceBanner.mjs +2 -4
  70. package/dist/components/navigation/OverdueInvoiceBanner.mjs.map +1 -1
  71. package/dist/components/navigation/PendingCancellationBanner.mjs +6 -4
  72. package/dist/components/navigation/PendingCancellationBanner.mjs.map +1 -1
  73. package/dist/components/navigation/ProjectSelectorPopover.mjs +6 -8
  74. package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -1
  75. package/dist/components/navigation/UpcomingInvoiceBanner.mjs +6 -4
  76. package/dist/components/navigation/UpcomingInvoiceBanner.mjs.map +1 -1
  77. package/dist/components/navigation/subcomponents/BottomLinks.mjs +3 -5
  78. package/dist/components/navigation/subcomponents/BottomLinks.mjs.map +1 -1
  79. package/dist/components/navigation/subcomponents/CreditsCard.mjs +1 -3
  80. package/dist/components/navigation/subcomponents/CreditsCard.mjs.map +1 -1
  81. package/dist/components/navigation/subcomponents/PlanCard.mjs +1 -3
  82. package/dist/components/navigation/subcomponents/PlanCard.mjs.map +1 -1
  83. package/dist/components/navigation/subcomponents/ProjectSelector.mjs +3 -5
  84. package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
  85. package/dist/components/pages/NotFoundPage.mjs +3 -5
  86. package/dist/components/pages/NotFoundPage.mjs.map +1 -1
  87. package/dist/components/pages/notifications/Notifications.mjs +10 -13
  88. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  89. package/dist/components/ui/buttons/CopyButton.mjs +5 -9
  90. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  91. package/dist/components/ui/data-display/CardItem.mjs +5 -7
  92. package/dist/components/ui/data-display/CardItem.mjs.map +1 -1
  93. package/dist/components/ui/data-display/PaymentInfoCard.mjs +8 -10
  94. package/dist/components/ui/data-display/PaymentInfoCard.mjs.map +1 -1
  95. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  96. package/dist/components/ui/feedback/DefaultCircularProgress.mjs +1 -3
  97. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  98. package/dist/components/ui/form/ComboboxField.mjs +6 -11
  99. package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
  100. package/dist/components/ui/form/DatePicker.mjs +2 -5
  101. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  102. package/dist/components/ui/form/DateRangePicker.mjs +2 -5
  103. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  104. package/dist/components/ui/form/PhoneInput.mjs +3 -5
  105. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  106. package/dist/components/ui/form/SelectField.mjs +3 -6
  107. package/dist/components/ui/form/SelectField.mjs.map +1 -1
  108. package/dist/components/widgets/ImageUpload/ImageCropModal.mjs +18 -11
  109. package/dist/components/widgets/ImageUpload/ImageCropModal.mjs.map +1 -1
  110. package/dist/components/widgets/ImageUpload/ImageTooSmallModal.mjs +15 -6
  111. package/dist/components/widgets/ImageUpload/ImageTooSmallModal.mjs.map +1 -1
  112. package/dist/index.mjs +2 -16
  113. package/dist/index.mjs.map +1 -1
  114. package/dist/modules/cards/hooks/handle-delete-card.hook.mjs +1 -2
  115. package/dist/modules/cards/hooks/handle-delete-card.hook.mjs.map +1 -1
  116. package/dist/modules/images/utils/validate-image.mjs +8 -8
  117. package/dist/modules/images/utils/validate-image.mjs.map +1 -1
  118. package/dist/modules/plans/services/plans.service.mjs +1 -1
  119. package/dist/modules/plans/services/plans.service.mjs.map +1 -1
  120. package/dist/modules/plans/types/plan.type.mjs +0 -3
  121. package/dist/modules/plans/types/plan.type.mjs.map +1 -1
  122. package/dist/modules/plans/utils/map-api-plan-to-ui.mjs +34 -56
  123. package/dist/modules/plans/utils/map-api-plan-to-ui.mjs.map +1 -1
  124. package/dist/modules/subscriptions/utils/periodicity.mjs +14 -20
  125. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  126. package/dist/providers/auth.provider.mjs +1 -9
  127. package/dist/providers/auth.provider.mjs.map +1 -1
  128. package/dist/server.mjs +0 -2
  129. package/dist/server.mjs.map +1 -1
  130. package/dist/utils/format/currency.mjs +4 -32
  131. package/dist/utils/format/currency.mjs.map +1 -1
  132. package/dist/utils/intl/locales.mjs +2 -3
  133. package/dist/utils/intl/locales.mjs.map +1 -1
  134. package/package.json +1 -7
  135. package/src/components/account/ConfigurationsMyAccountModal.tsx +6 -10
  136. package/src/components/account/ConfirmDeleteAccountModal.tsx +13 -22
  137. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +10 -12
  138. package/src/components/account/DeleteAccountModal.tsx +24 -34
  139. package/src/components/account/DisableTwoFactorAuthModal.tsx +6 -11
  140. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +6 -8
  141. package/src/components/account/TwoFactorAuthModal.tsx +29 -33
  142. package/src/components/account/constants.ts +5 -8
  143. package/src/components/account/hooks/useChangeEmailForm.tsx +3 -5
  144. package/src/components/account/hooks/useChangePasswordForm.tsx +6 -20
  145. package/src/components/account/hooks/useChangePhoneForm.tsx +10 -16
  146. package/src/components/account/hooks/useDisableTwoFactorAuthForm.tsx +6 -20
  147. package/src/components/account/hooks/useOtpVerification.tsx +4 -16
  148. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +7 -21
  149. package/src/components/account/sections/ChangeEmailModal.tsx +21 -35
  150. package/src/components/account/sections/ChangePasswordSection.tsx +6 -10
  151. package/src/components/account/sections/ChangePhoneModal.tsx +22 -50
  152. package/src/components/account/sections/MyProfileSection.tsx +23 -37
  153. package/src/components/account/sections/PreferencesSection.tsx +25 -52
  154. package/src/components/account/sections/SecuritySection.tsx +10 -19
  155. package/src/components/account/sections/TokenSection.tsx +10 -22
  156. package/src/components/layouts/AppMobileNavBar.tsx +154 -1
  157. package/src/components/layouts/NavBar.tsx +3 -5
  158. package/src/components/layouts/NotificationsPopover.tsx +3 -5
  159. package/src/components/layouts/ProfilePopover.tsx +4 -6
  160. package/src/components/layouts/UsersSelectorPopover.tsx +7 -9
  161. package/src/components/modals/BuyCreditsModal.tsx +16 -18
  162. package/src/components/modals/CreditsDisabledModal.tsx +6 -6
  163. package/src/components/modals/PaidPlanRequiredModal.tsx +3 -5
  164. package/src/components/modals/cards/AddCardModal.tsx +27 -29
  165. package/src/components/modals/cards/CannotDeleteCardModal.tsx +8 -9
  166. package/src/components/modals/cards/CardFormFields.tsx +22 -25
  167. package/src/components/modals/cards/DeleteCardModal.tsx +8 -10
  168. package/src/components/navigation/CancelledSubscriptionBanner.tsx +2 -4
  169. package/src/components/navigation/OverdueInvoiceBanner.tsx +2 -4
  170. package/src/components/navigation/PendingCancellationBanner.tsx +2 -4
  171. package/src/components/navigation/ProjectSelectorPopover.tsx +6 -8
  172. package/src/components/navigation/UpcomingInvoiceBanner.tsx +2 -4
  173. package/src/components/navigation/subcomponents/BottomLinks.tsx +3 -5
  174. package/src/components/navigation/subcomponents/CreditsCard.tsx +1 -3
  175. package/src/components/navigation/subcomponents/PlanCard.tsx +1 -3
  176. package/src/components/navigation/subcomponents/ProjectSelector.tsx +3 -5
  177. package/src/components/pages/NotFoundPage.tsx +3 -5
  178. package/src/components/pages/notifications/Notifications.tsx +10 -13
  179. package/src/components/ui/buttons/CopyButton.tsx +5 -10
  180. package/src/components/ui/data-display/CardItem.tsx +5 -7
  181. package/src/components/ui/data-display/PaymentInfoCard.tsx +8 -10
  182. package/src/components/ui/feedback/CircularProgress.tsx +0 -4
  183. package/src/components/ui/feedback/DefaultCircularProgress.tsx +1 -3
  184. package/src/components/ui/form/ComboboxField.tsx +6 -11
  185. package/src/components/ui/form/DatePicker.tsx +2 -5
  186. package/src/components/ui/form/DateRangePicker.tsx +2 -5
  187. package/src/components/ui/form/PhoneInput.tsx +3 -5
  188. package/src/components/ui/form/SelectField.tsx +3 -6
  189. package/src/components/widgets/ImageUpload/ImageCropModal.tsx +11 -19
  190. package/src/components/widgets/ImageUpload/ImageTooSmallModal.tsx +5 -6
  191. package/src/index.ts +2 -12
  192. package/src/modules/cards/hooks/handle-delete-card.hook.ts +3 -8
  193. package/src/modules/images/utils/validate-image.ts +8 -23
  194. package/src/modules/plans/services/plans.service.ts +1 -1
  195. package/src/modules/plans/types/plan.type.ts +0 -3
  196. package/src/modules/plans/utils/map-api-plan-to-ui.ts +46 -103
  197. package/src/modules/subscriptions/utils/periodicity.ts +12 -29
  198. package/src/providers/auth.provider.tsx +1 -13
  199. package/src/server.ts +0 -2
  200. package/src/utils/format/currency.ts +7 -62
  201. package/src/utils/intl/locales.ts +2 -3
  202. package/dist/i18n/config.mjs +0 -13
  203. package/dist/i18n/config.mjs.map +0 -1
  204. package/dist/i18n/country-language.mjs +0 -74
  205. package/dist/i18n/country-language.mjs.map +0 -1
  206. package/dist/i18n/messages/en-us.mjs +0 -492
  207. package/dist/i18n/messages/en-us.mjs.map +0 -1
  208. package/dist/i18n/messages/es-es.mjs +0 -492
  209. package/dist/i18n/messages/es-es.mjs.map +0 -1
  210. package/dist/i18n/messages/index.mjs +0 -16
  211. package/dist/i18n/messages/index.mjs.map +0 -1
  212. package/dist/i18n/messages/pt-br.mjs +0 -505
  213. package/dist/i18n/messages/pt-br.mjs.map +0 -1
  214. package/dist/i18n/normalize.mjs +0 -12
  215. package/dist/i18n/normalize.mjs.map +0 -1
  216. package/dist/i18n/resolve-locale.mjs +0 -42
  217. package/dist/i18n/resolve-locale.mjs.map +0 -1
  218. package/dist/i18n.mjs +0 -14
  219. package/dist/i18n.mjs.map +0 -1
  220. package/dist/modules/accounts/hooks/use-currency-formatter.hook.mjs +0 -20
  221. package/dist/modules/accounts/hooks/use-currency-formatter.hook.mjs.map +0 -1
  222. package/dist/utils/intl/cookie-domain.mjs +0 -17
  223. package/dist/utils/intl/cookie-domain.mjs.map +0 -1
  224. package/dist/utils/intl/locale-cookie.mjs +0 -13
  225. package/dist/utils/intl/locale-cookie.mjs.map +0 -1
  226. package/src/i18n/config.ts +0 -17
  227. package/src/i18n/country-language.ts +0 -60
  228. package/src/i18n/messages/en-us.ts +0 -512
  229. package/src/i18n/messages/es-es.ts +0 -513
  230. package/src/i18n/messages/index.ts +0 -24
  231. package/src/i18n/messages/pt-br.ts +0 -536
  232. package/src/i18n/normalize.ts +0 -15
  233. package/src/i18n/resolve-locale.ts +0 -77
  234. package/src/i18n.ts +0 -10
  235. package/src/modules/accounts/hooks/use-currency-formatter.hook.tsx +0 -32
  236. package/src/utils/intl/cookie-domain.ts +0 -29
  237. package/src/utils/intl/locale-cookie.ts +0 -18
@@ -1,505 +0,0 @@
1
- const messages = {
2
- // Vocabulário global de ações (botões, comandos).
3
- actions: {
4
- save: "Salvar",
5
- saveChanges: "Salvar altera\xE7\xF5es",
6
- cancel: "Cancelar",
7
- confirm: "Confirmar",
8
- delete: "Excluir",
9
- edit: "Editar",
10
- close: "Fechar",
11
- back: "Voltar",
12
- continue: "Continuar",
13
- add: "Adicionar",
14
- remove: "Remover",
15
- search: "Buscar",
16
- loading: "Carregando...",
17
- saving: "Salvando...",
18
- sending: "Enviando...",
19
- copy: "Copiar",
20
- copied: "Copiado"
21
- },
22
- // Mensagens de validação de formulário.
23
- validations: {
24
- required: "Campo obrigat\xF3rio",
25
- invalidEmail: "E-mail inv\xE1lido",
26
- invalidPhone: "Telefone inv\xE1lido"
27
- },
28
- // Componente: PreferencesSection.
29
- preferences: {
30
- title: "Prefer\xEAncias",
31
- companyName: "Nome da empresa",
32
- companyNamePlaceholder: "Digite o nome da empresa",
33
- language: "Idioma",
34
- languagePlaceholder: "Selecione o idioma",
35
- languageSearch: "Buscar idioma...",
36
- currency: "Moeda",
37
- currencyPlaceholder: "Selecione a moeda",
38
- currencySearch: "Buscar moeda...",
39
- timeDisplay: "Exibi\xE7\xE3o hora",
40
- timezone: "Fuso hor\xE1rio",
41
- timezonePlaceholder: "Selecione o fuso hor\xE1rio",
42
- timezoneSearch: "Buscar fuso hor\xE1rio...",
43
- timeFormat: "Formato hora",
44
- timeFormatPlaceholder: "Selecione o formato",
45
- timeFormatOptions: {
46
- h24: "24 horas",
47
- h12: "12 horas (AM/PM)"
48
- },
49
- savedSuccess: "Prefer\xEAncias salvas com sucesso",
50
- saveError: "Erro ao salvar prefer\xEAncias"
51
- },
52
- // Conta — modais e seções. `<b>` = trecho em negrito (rich text); `{count}` = interpolação.
53
- account: {
54
- notificationTypes: {
55
- projectUpdates: "Atualiza\xE7\xF5es de projetos",
56
- securityAlerts: "Alertas de seguran\xE7a",
57
- planBilling: "Mudan\xE7as no plano ou faturamento",
58
- scheduledMaintenance: "Manuten\xE7\xF5es programadas"
59
- },
60
- deleteAccount: {
61
- title: "Excluir conta",
62
- description: "Esta a\xE7\xE3o \xE9 <b>irrevers\xEDvel</b>. Ao confirmar, sua conta e todos os seus dados ser\xE3o exclu\xEDdos.",
63
- reasonLabel: "Motivo do cancelamento",
64
- reasonPlaceholder: "Selecione",
65
- descriptionLabel: "Descreva o que levou a tomar essa decis\xE3o",
66
- descriptionPlaceholder: "Explique sua decis\xE3o...",
67
- charactersCount: "{count}/400 caracteres",
68
- passwordLabel: "Senha",
69
- passwordPlaceholder: "Informe sua senha",
70
- submit: "Excluir conta",
71
- requiredFields: "Preencha todos os campos obrigat\xF3rios",
72
- reasons: {
73
- noFeature: "A ferramenta n\xE3o possui uma fun\xE7\xE3o que eu preciso",
74
- technical: "Encontrei problemas t\xE9cnicos ou erros no sistema",
75
- support: "Tive problemas com o suporte ou atendimento",
76
- updates: "As atualiza\xE7\xF5es demoram mais do que o esperado",
77
- temporary: "O cancelamento \xE9 tempor\xE1rio",
78
- other: "Outro motivo"
79
- }
80
- },
81
- confirmDelete: {
82
- title: "Uma pena te ver ir!",
83
- warning: "Todas suas <b>{count} p\xE1ginas</b> ser\xE3o deletadas permanentemente. Essa a\xE7\xE3o \xE9 <b>irrevers\xEDvel!</b>",
84
- sessionExpired: "Sess\xE3o expirada. Preencha os campos novamente.",
85
- success: "Conta exclu\xEDda com sucesso",
86
- error: "Erro ao excluir. Tente novamente.",
87
- keepAccount: "Manter minha conta",
88
- deleteAnyway: "Excluir mesmo assim",
89
- deleting: "Excluindo..."
90
- },
91
- cantDelete: {
92
- title: "N\xE3o \xE9 poss\xEDvel excluir a conta",
93
- description: "Voc\xEA tem uma assinatura ativa. Para excluir sua conta, <b>primeiro cancele a assinatura</b> na p\xE1gina Assinatura e depois tente novamente.",
94
- confirm: "Ok, entendi",
95
- goToSubscription: "Ir para assinatura"
96
- },
97
- twoFactor: {
98
- title: "Autentica\xE7\xE3o de dois fatores",
99
- instructions: "Instale um aplicativo autenticador no seu celular (ex.: <link>Google Authenticator</link>), escaneie o QR Code ao lado ou copie a chave no aplicativo e, em seguida, digite o c\xF3digo de 6 d\xEDgitos gerado para continuar.",
100
- qrAlt: "QR Code para autentica\xE7\xE3o de dois fatores",
101
- retry: "Tentar novamente",
102
- pasteDigits: "Cole os 6 d\xEDgitos abaixo",
103
- activating: "Ativando...",
104
- activate: "Ativar autentica\xE7\xE3o",
105
- recoveryTitle: "C\xF3digos de seguran\xE7a",
106
- recoveryHeading: "Salve estes c\xF3digos de recupera\xE7\xE3o de emerg\xEAncia",
107
- recoveryText1: "Se voc\xEA perder acesso ao seu telefone, n\xE3o ser\xE1 poss\xEDvel fazer login em sua conta sem um c\xF3digo de dois fatores.",
108
- recoveryText2: "Imprima, copie ou escreva em um local seguro os c\xF3digos abaixo.",
109
- copyCodes: "Copiar c\xF3digos",
110
- finish: "Finalizar",
111
- codesCopied: "C\xF3digos copiados com sucesso",
112
- generateError: "Erro ao gerar QR Code. Tente novamente.",
113
- confirmError: "Erro ao confirmar c\xF3digo. Tente novamente.",
114
- disableTitle: "Desabilitar autentica\xE7\xE3o 2FA",
115
- disableDescription: "Informe o c\xF3digo de 6 d\xEDgitos do seu aplicativo autenticador para confirmar a desativa\xE7\xE3o.",
116
- authenticatorCode: "C\xF3digo do autenticador",
117
- disabling: "Desabilitando...",
118
- disable: "Desabilitar 2FA",
119
- disabledSuccess: "Autentica\xE7\xE3o de dois fatores desabilitada",
120
- disableError: "Erro ao desabilitar 2FA. Tente novamente.",
121
- invalidCode: "C\xF3digo inv\xE1lido",
122
- codeResent: "C\xF3digo reenviado",
123
- resendError: "Erro ao reenviar c\xF3digo. Tente novamente."
124
- },
125
- profile: {
126
- title: "Meu perfil",
127
- avatarAlt: "Foto do usu\xE1rio",
128
- changePhoto: "Alterar foto",
129
- name: "Nome",
130
- namePlaceholder: "Digite seu nome",
131
- lastName: "Sobrenome",
132
- lastNamePlaceholder: "Digite seu sobrenome",
133
- gender: "G\xEAnero",
134
- genderPlaceholder: "Selecione seu g\xEAnero",
135
- genderOptions: {
136
- male: "Masculino",
137
- female: "Feminino"
138
- },
139
- phone: "Telefone",
140
- change: "Alterar",
141
- accessData: "Dados de acesso",
142
- email: "E-mail",
143
- savedSuccess: "Perfil atualizado com sucesso",
144
- saveError: "Erro ao atualizar perfil"
145
- },
146
- otp: {
147
- validationCode: "C\xF3digo de valida\xE7\xE3o",
148
- incorrectCode: "C\xF3digo incorreto",
149
- resend: "Reenviar c\xF3digo",
150
- resendIn: "Reenviar em <b>{time}</b>",
151
- validating: "Validando..."
152
- },
153
- changeEmail: {
154
- title: "Alterar e-mail",
155
- confirm: "Alterar e-mail",
156
- sentCodeTo: "Enviamos um c\xF3digo de valida\xE7\xE3o para o E-mail <b>{email}.</b>",
157
- updateTitle: "Atualizar E-mail de contato",
158
- updateDescription: "Informe o seu novo E-mail para manter seu contato atualizado.",
159
- newEmail: "Novo e-mail",
160
- newEmailPlaceholder: "Digite seu novo e-mail",
161
- emailChanged: "E-mail alterado com sucesso",
162
- emailExistsError: "E-mail j\xE1 existente ou ocorreu um erro. Tente novamente mais tarde."
163
- },
164
- changePhone: {
165
- titleEdit: "Alterar telefone",
166
- titleAdd: "Adicionar telefone",
167
- sentCodeTo: "Enviamos um c\xF3digo de valida\xE7\xE3o para o n\xFAmero atual <b>{phone}.</b>",
168
- confirm: "Alterar telefone",
169
- updateTitle: "Atualizar telefone de contato",
170
- addTitle: "Adicionar telefone de contato",
171
- updateDescription: "Informe o novo n\xFAmero para manter seu contato atualizado.",
172
- addDescription: "Informe seu n\xFAmero de telefone para contato.",
173
- newNumber: "Novo n\xFAmero",
174
- numberLabel: "N\xFAmero de telefone",
175
- phoneChanged: "Telefone alterado",
176
- phoneAdded: "Telefone adicionado",
177
- invalidNumber: "N\xFAmero de telefone inv\xE1lido",
178
- saveError: "Ocorreu um erro ao salvar o telefone. Tente novamente mais tarde.",
179
- numberExistsError: "N\xFAmero j\xE1 existente ou ocorreu um erro. Tente novamente mais tarde."
180
- },
181
- security: {
182
- title: "Seguran\xE7a",
183
- googleLinkedTitle: "Conta Google vinculada",
184
- googleLinkedDescription: 'Sua conta est\xE1 vinculada ao Google. Se desvincular, use "Esqueci minha senha" para redefinir uma senha de acesso por e-mail.',
185
- unlinking: "Desvinculando...",
186
- unlinkGoogle: "Desvincular Google",
187
- unlinkError: "Erro ao desvincular conta Google.",
188
- deleteAccountDescription: "Esta a\xE7\xE3o \xE9 permanente e n\xE3o pode ser desfeita. Todos os seus dados, projetos e configura\xE7\xF5es ser\xE3o removidos definitivamente.",
189
- deleteMyAccount: "Excluir minha conta"
190
- },
191
- token: {
192
- title: "Token da conta",
193
- label: "Token",
194
- copySuccess: "Token copiado com sucesso",
195
- copyError: "N\xE3o foi poss\xEDvel copiar o token",
196
- info: "Este token \xE9 exclusivo da sua conta e permite acesso \xE0 API. N\xE3o compartilhe com terceiros.",
197
- docsLink: "Acessar a documenta\xE7\xE3o"
198
- },
199
- changePassword: {
200
- title: "Alterar senha",
201
- currentPassword: "Senha atual",
202
- currentPasswordPlaceholder: "Digite sua senha atual",
203
- newPassword: "Nova senha",
204
- newPasswordPlaceholder: "Digite sua nova senha",
205
- submit: "Salvar nova senha",
206
- changeError: "Erro ao alterar senha",
207
- changedSuccess: "Senha alterada com sucesso",
208
- genericError: "Erro ao alterar senha. Tente novamente."
209
- },
210
- globalPreferences: {
211
- title: "Alterar prefer\xEAncias globais",
212
- srDescription: "Confirma\xE7\xE3o de altera\xE7\xE3o de prefer\xEAncias globais da conta",
213
- warning: "Voc\xEA est\xE1 alterando configura\xE7\xF5es que impactam <b>todos os usu\xE1rios da conta</b>. Deseja confirmar?"
214
- },
215
- configurations: {
216
- title: "Configura\xE7\xF5es"
217
- }
218
- },
219
- // Modais de créditos de IA.
220
- credits: {
221
- buy: {
222
- title: "Comprar cr\xE9ditos de IA",
223
- externalTitle: "Cr\xE9ditos de IA",
224
- externalDescription: "Para adquirir cr\xE9ditos de IA, acesse sua \xE1rea de assinatura.",
225
- externalButton: "Acessar \xE1rea de assinatura",
226
- creditsOptionLabel: "{credits} cr\xE9ditos de IA",
227
- creditsOptionDisplayValue: "{credits} cr\xE9ditos de IA",
228
- paymentOnConfirm: "O pagamento ser\xE1 processado no momento da confirma\xE7\xE3o.",
229
- nextInvoiceChanges: "As altera\xE7\xF5es entrar\xE3o em vigor a partir da sua pr\xF3xima fatura.",
230
- defaultPrice: "Padr\xE3o",
231
- immediateCharge: "Cobran\xE7a imediata",
232
- totalPlanValue: "Valor total do plano",
233
- confirmAndPay: "Confirmar e pagar",
234
- creditsChangedToast: "Cr\xE9ditos de IA alterados para {credits}"
235
- },
236
- disabled: {
237
- title: "Compra de cr\xE9ditos indispon\xEDvel",
238
- descriptionLine1: "Apenas administradores e propriet\xE1rios podem comprar cr\xE9ditos de IA.",
239
- descriptionLine2: "Pe\xE7a a um administrador ou propriet\xE1rio da conta para adquirir mais cr\xE9ditos.",
240
- understood: "Entendi"
241
- },
242
- paidPlanRequired: {
243
- defaultTitle: "Recurso dispon\xEDvel em planos pagos",
244
- defaultDescription: "Para acessar este recurso, fa\xE7a upgrade para um plano pago",
245
- knowPlans: "Conhecer planos"
246
- }
247
- },
248
- // Cartões: adicionar, formulário, excluir, não-pode-excluir, item, info de pagamento.
249
- cards: {
250
- add: {
251
- stepBilling: "Cobran\xE7a",
252
- stepCard: "Cart\xE3o",
253
- externalTitle: "Gerenciamento de cart\xF5es indispon\xEDvel",
254
- externalDescription: "Acesse sua \xE1rea de assinatura para gerenciar formas de pagamento.",
255
- externalButton: "Acessar \xE1rea de assinatura",
256
- title: "Adicionar cart\xE3o",
257
- billingHeading: "Adicione suas informa\xE7\xF5es de cobran\xE7a",
258
- cardHeading: "Adicione informa\xE7\xF5es do seu cart\xE3o",
259
- authenticating: "Autenticando...",
260
- submitting: "Adicionando cart\xE3o...",
261
- submit: "Adicionar cart\xE3o",
262
- errorInitAuth: "N\xE3o foi poss\xEDvel iniciar a autentica\xE7\xE3o do cart\xE3o, tente novamente.",
263
- errorAuth: "Falha na autentica\xE7\xE3o do cart\xE3o.",
264
- errorAuthStatus: "Autentica\xE7\xE3o n\xE3o conclu\xEDda (status: {status}).",
265
- statusUnknown: "desconhecido",
266
- successToast: "Cart\xE3o adicionado com sucesso.",
267
- errorSave: "N\xE3o foi poss\xEDvel salvar o seu novo cart\xE3o, tente novamente."
268
- },
269
- form: {
270
- nameOnCard: "Nome impresso no cart\xE3o",
271
- typeHere: "Digite aqui",
272
- cardNumber: "N\xFAmero do cart\xE3o",
273
- cardExpiry: "Data de validade",
274
- cardCvc: "CVC",
275
- country: "Pa\xEDs",
276
- select: "Selecione",
277
- personType: "Tipo de pessoa",
278
- personTypePf: "Pessoa f\xEDsica",
279
- personTypePj: "Pessoa jur\xEDdica",
280
- cpf: "CPF",
281
- cnpj: "CNPJ",
282
- fullName: "Nome completo",
283
- cep: "CEP",
284
- street: "Endere\xE7o",
285
- streetNumber: "N\xFAmero",
286
- city: "Cidade",
287
- state: "UF",
288
- neighborhood: "Bairro",
289
- complement: "Complemento",
290
- cardNumberRequired: "N\xFAmero do cart\xE3o \xE9 obrigat\xF3rio",
291
- cardExpiryRequired: "Data de validade \xE9 obrigat\xF3ria",
292
- cardCvcRequired: "C\xF3digo de seguran\xE7a \xE9 obrigat\xF3rio"
293
- },
294
- delete: {
295
- title: "Excluir cart\xE3o",
296
- description: "Deseja realmente excluir o cart\xE3o:",
297
- confirmLabel: "Digite EXCLUIR abaixo",
298
- confirmPlaceholder: "EXCLUIR",
299
- deleting: "Excluindo...",
300
- successToast: "O cart\xE3o \u2022\u2022\u2022\u2022 {digits} foi exclu\xEDdo com sucesso",
301
- errorToast: "N\xE3o foi poss\xEDvel excluir o cart\xE3o"
302
- },
303
- cannotDelete: {
304
- title: "N\xE3o \xE9 poss\xEDvel excluir este cart\xE3o",
305
- description: "Este cart\xE3o est\xE1 em uso e tem uma assinatura ativa vinculada a ele. Selecione outro cart\xE3o como padr\xE3o ou adicione um novo.",
306
- selectDefault: "Selecione um cart\xE3o como padr\xE3o:",
307
- addNewCard: "Adicionar novo cart\xE3o",
308
- errorUpdateCard: "Erro ao atualizar cart\xE3o da assinatura"
309
- },
310
- item: {
311
- defaultBadge: "Padr\xE3o",
312
- makeDefault: "Tornar padr\xE3o",
313
- setDefaultSuccess: "Cart\xE3o definido como padr\xE3o",
314
- setDefaultError: "Erro ao definir cart\xE3o padr\xE3o"
315
- },
316
- paymentInfo: {
317
- email: "E-mail",
318
- payment: "Pagamento",
319
- addCard: "Adicionar cart\xE3o",
320
- selectPaymentMethod: "Selecione a forma de pagamento",
321
- manageCards: "Gerenciar cart\xF5es",
322
- newPaymentMethod: "Nova forma de pagamento"
323
- }
324
- },
325
- // Componentes de navegação: banners de assinatura, seletor de projeto, links de rodapé, créditos, plano.
326
- navigation: {
327
- banners: {
328
- cancelled: {
329
- message: "Assinatura cancelada! Suas p\xE1ginas foram retiradas do ar.",
330
- choosePlan: "Escolher um novo plano"
331
- },
332
- overdue: {
333
- message: "Sua assinatura est\xE1 atrasada e suas p\xE1ginas podem ser retiradas do ar a qualquer momento.",
334
- details: "Detalhes"
335
- },
336
- pending: {
337
- message: "Sua assinatura foi cancelada, voc\xEA possui at\xE9 {limitDate} com suas p\xE1ginas online.",
338
- reactivate: "Reativar assinatura"
339
- },
340
- upcoming: {
341
- message: "Fatura em aberto. Pague at\xE9 {dueDate} para evitar a suspens\xE3o das suas p\xE1ginas.",
342
- details: "Detalhes"
343
- }
344
- },
345
- projectSelector: {
346
- title: "Projetos",
347
- searchPlaceholder: "Busque aqui",
348
- emptyLine1: "Nenhum projeto encontrado.",
349
- emptyLine2: "Crie um projeto para come\xE7ar.",
350
- noResults: "Nenhum resultado encontrado.",
351
- manageProjects: "Gerenciar projetos"
352
- },
353
- bottomLinks: {
354
- news: "Novidades",
355
- helpCenter: "Central de ajuda",
356
- sendSuggestions: "Enviar sugest\xF5es"
357
- },
358
- creditsCard: {
359
- label: "Cr\xE9ditos usados"
360
- },
361
- planCard: {
362
- knowPlans: "Conhe\xE7a os planos"
363
- }
364
- },
365
- // Nomes dos idiomas exibidos no seletor.
366
- // Planos: features e main features (mapApiPlanToUiPlan).
367
- plans: {
368
- features: {
369
- unlimitedVisits: "Visitas ilimitadas",
370
- unlimitedLeads: "Leads ilimitadas",
371
- sharePages: "Compartilhar p\xE1ginas",
372
- hosting: "Hospedagem inclusa",
373
- freeTemplates: "Templates gratuitos",
374
- onboarding: "Reuni\xE3o de Onboarding",
375
- projectManagement: "Gest\xE3o de projetos"
376
- },
377
- mainFeatures: {
378
- pagesUnlimited: "P\xE1ginas ilimitadas",
379
- pageSingular: "1 p\xE1gina",
380
- pagesPlural: "{count} p\xE1ginas",
381
- domainsUnlimited: "Dom\xEDnios ilimitados",
382
- domainSingular: "1 dom\xEDnio externo",
383
- domainsPlural: "{count} dom\xEDnios externos",
384
- usersUnlimited: "Usu\xE1rios ilimitados"
385
- }
386
- },
387
- // Periodicidade de cobrança.
388
- periodicity: {
389
- monthly: "Mensal",
390
- semiannual: "Semestral",
391
- annual: "Anual",
392
- suffixMonthly: "/m\xEAs",
393
- suffixSemiannual: "/semestre",
394
- suffixAnnual: "/ano",
395
- labelMonthly: "mensal",
396
- labelSemiannual: "semestral",
397
- labelAnnual: "anual"
398
- },
399
- languages: {
400
- "pt-br": "Portugu\xEAs (Brasil)",
401
- "en-us": "Ingl\xEAs (EUA)",
402
- "es-es": "Espanhol"
403
- },
404
- // Componentes de formulário e entrada.
405
- forms: {
406
- combobox: {
407
- placeholder: "Selecione uma op\xE7\xE3o",
408
- searchPlaceholder: "Buscar...",
409
- emptyMessage: "Nenhuma op\xE7\xE3o encontrada."
410
- },
411
- datePicker: {
412
- placeholder: "Selecione a data"
413
- },
414
- dateRangePicker: {
415
- placeholder: "Selecione o per\xEDodo"
416
- },
417
- phoneInput: {
418
- optional: "(Opcional)",
419
- searchPlaceholder: "Buscar pa\xEDs...",
420
- emptyMessage: "Nenhum pa\xEDs encontrado"
421
- },
422
- select: {
423
- placeholder: "Selecione uma op\xE7\xE3o",
424
- optional: "(Opcional)"
425
- },
426
- copyButton: {
427
- tooltipDefault: "Copiar link",
428
- successDefault: "Link copiado",
429
- errorMessage: "N\xE3o foi poss\xEDvel copiar o link"
430
- },
431
- circularProgress: {
432
- ariaLabel: "Progresso de exporta\xE7\xE3o"
433
- }
434
- },
435
- // Componentes: ImageCropModal, ImageTooSmallModal.
436
- imageUpload: {
437
- cropTitle: "Ajustar imagem",
438
- cropHint: "Arraste para ajustar a \xE1rea de corte",
439
- cropAlt: "Crop",
440
- tooSmallTitleWithDimension: "Foto menor que {dimensionText}",
441
- tooSmallTitleGeneric: "Foto muito pequena",
442
- tooSmallBodyFileWithDimension: 'O arquivo "{fileName}" \xE9 menor que {dimensionText}. Fa\xE7a envio de uma imagem com pelo menos {dimensionText} para continuar.',
443
- tooSmallBodyFileGeneric: 'O arquivo "{fileName}" \xE9 menor que o tamanho m\xEDnimo exigido. Fa\xE7a envio de uma imagem maior para continuar.',
444
- tooSmallBodyNoFileWithDimension: "A imagem selecionada \xE9 menor que {dimensionText}. Fa\xE7a envio de uma imagem com pelo menos {dimensionText} para continuar.",
445
- tooSmallBodyNoFileGeneric: "A imagem selecionada \xE9 menor que o tamanho m\xEDnimo exigido. Fa\xE7a envio de uma imagem maior para continuar.",
446
- sendAnother: "Enviar outra",
447
- errorSvg: "Formato SVG n\xE3o \xE9 suportado. Use PNG, JPEG, WebP ou GIF.",
448
- errorFormat: "Formato n\xE3o suportado. Use PNG, JPEG, WebP ou GIF.",
449
- errorTooLarge: "Arquivo muito grande. M\xE1ximo {maxSize}MB."
450
- },
451
- // Componentes: NotificationPageContent (Notifications.tsx), NotificationsPopover.tsx.
452
- notifications: {
453
- page: {
454
- title: "Notifica\xE7\xF5es",
455
- subtitle: "Tenha controle total sobre p\xE1ginas, experi\xEAncias e convers\xF5es.",
456
- markAllReadDesktop: "Marcar todos como lidos",
457
- markAllReadMobile: "Marcar como lidos",
458
- tabAll: "Todas as notifica\xE7\xF5es",
459
- tabUnread: "N\xE3o lidas",
460
- details: "Detalhes",
461
- empty: "Nenhuma notifica\xE7\xE3o encontrada.",
462
- markAllSuccess: "Todas as notifica\xE7\xF5es foram marcadas como lidas",
463
- markAllError: "Erro ao marcar notifica\xE7\xF5es como lidas"
464
- },
465
- popover: {
466
- title: "\xDAltimas notifica\xE7\xF5es",
467
- empty: "Sem notifica\xE7\xF5es por enquanto",
468
- viewAll: "Todas as notifica\xE7\xF5es"
469
- }
470
- },
471
- // Componentes: NavBar.tsx, ProfilePopover.tsx, UsersSelectorPopover.tsx.
472
- layout: {
473
- navbar: {
474
- expandMenu: "Expandir menu",
475
- greatPages: "GreatPages",
476
- pages: "P\xE1ginas"
477
- },
478
- profile: {
479
- usedCredits: "Cr\xE9ditos usados",
480
- loggingOut: "Saindo da sua conta...",
481
- logout: "Sair"
482
- },
483
- usersSelector: {
484
- title: "Usu\xE1rios",
485
- add: "Adicionar",
486
- searchPlaceholder: "Busque aqui",
487
- empty: "Nenhum usu\xE1rio encontrado.",
488
- noResults: "Nenhum resultado encontrado.",
489
- addToProject: "Adicionar ao projeto",
490
- removeFromProject: "Remover do projeto",
491
- manageTeam: "Gerenciar equipe"
492
- }
493
- },
494
- // Componente: NotFoundPage.tsx.
495
- notFound: {
496
- title: "P\xE1gina n\xE3o foi encontrada!",
497
- description: "A p\xE1gina que voc\xEA est\xE1 procurando n\xE3o existe. Verifique se digitou corretamente o link que est\xE1 procurando.",
498
- backToHome: "Voltar para o in\xEDcio"
499
- }
500
- };
501
- var pt_br_default = messages;
502
- export {
503
- pt_br_default as default
504
- };
505
- //# sourceMappingURL=pt-br.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/i18n/messages/pt-br.ts"],"sourcesContent":["/**\n * Catálogo de traduções pt-br dos componentes da @greatapps/common.\n * Os apps consumidores mesclam este objeto sob o namespace `common`.\n *\n * Padrão modular: cada chave de primeiro nível é um **módulo** (um agrupamento por\n * componente/domínio). Para adicionar traduções, crie/edite o módulo correspondente aqui\n * e replique a mesma estrutura em `en-us.ts` e `es-es.ts`.\n *\n * pt-br é a fonte da verdade — os textos saem verbatim do que o componente já exibe hoje.\n */\nconst messages = {\n // Vocabulário global de ações (botões, comandos).\n actions: {\n save: 'Salvar',\n saveChanges: 'Salvar alterações',\n cancel: 'Cancelar',\n confirm: 'Confirmar',\n delete: 'Excluir',\n edit: 'Editar',\n close: 'Fechar',\n back: 'Voltar',\n continue: 'Continuar',\n add: 'Adicionar',\n remove: 'Remover',\n search: 'Buscar',\n loading: 'Carregando...',\n saving: 'Salvando...',\n sending: 'Enviando...',\n copy: 'Copiar',\n copied: 'Copiado',\n },\n\n // Mensagens de validação de formulário.\n validations: {\n required: 'Campo obrigatório',\n invalidEmail: 'E-mail inválido',\n invalidPhone: 'Telefone inválido',\n },\n\n // Componente: PreferencesSection.\n preferences: {\n title: 'Preferências',\n companyName: 'Nome da empresa',\n companyNamePlaceholder: 'Digite o nome da empresa',\n language: 'Idioma',\n languagePlaceholder: 'Selecione o idioma',\n languageSearch: 'Buscar idioma...',\n currency: 'Moeda',\n currencyPlaceholder: 'Selecione a moeda',\n currencySearch: 'Buscar moeda...',\n timeDisplay: 'Exibição hora',\n timezone: 'Fuso horário',\n timezonePlaceholder: 'Selecione o fuso horário',\n timezoneSearch: 'Buscar fuso horário...',\n timeFormat: 'Formato hora',\n timeFormatPlaceholder: 'Selecione o formato',\n timeFormatOptions: {\n h24: '24 horas',\n h12: '12 horas (AM/PM)',\n },\n savedSuccess: 'Preferências salvas com sucesso',\n saveError: 'Erro ao salvar preferências',\n },\n\n // Conta — modais e seções. `<b>` = trecho em negrito (rich text); `{count}` = interpolação.\n account: {\n notificationTypes: {\n projectUpdates: 'Atualizações de projetos',\n securityAlerts: 'Alertas de segurança',\n planBilling: 'Mudanças no plano ou faturamento',\n scheduledMaintenance: 'Manutenções programadas',\n },\n deleteAccount: {\n title: 'Excluir conta',\n description:\n 'Esta ação é <b>irreversível</b>. Ao confirmar, sua conta e todos os seus dados serão excluídos.',\n reasonLabel: 'Motivo do cancelamento',\n reasonPlaceholder: 'Selecione',\n descriptionLabel: 'Descreva o que levou a tomar essa decisão',\n descriptionPlaceholder: 'Explique sua decisão...',\n charactersCount: '{count}/400 caracteres',\n passwordLabel: 'Senha',\n passwordPlaceholder: 'Informe sua senha',\n submit: 'Excluir conta',\n requiredFields: 'Preencha todos os campos obrigatórios',\n reasons: {\n noFeature: 'A ferramenta não possui uma função que eu preciso',\n technical: 'Encontrei problemas técnicos ou erros no sistema',\n support: 'Tive problemas com o suporte ou atendimento',\n updates: 'As atualizações demoram mais do que o esperado',\n temporary: 'O cancelamento é temporário',\n other: 'Outro motivo',\n },\n },\n confirmDelete: {\n title: 'Uma pena te ver ir!',\n warning:\n 'Todas suas <b>{count} páginas</b> serão deletadas permanentemente. Essa ação é <b>irreversível!</b>',\n sessionExpired: 'Sessão expirada. Preencha os campos novamente.',\n success: 'Conta excluída com sucesso',\n error: 'Erro ao excluir. Tente novamente.',\n keepAccount: 'Manter minha conta',\n deleteAnyway: 'Excluir mesmo assim',\n deleting: 'Excluindo...',\n },\n cantDelete: {\n title: 'Não é possível excluir a conta',\n description:\n 'Você tem uma assinatura ativa. Para excluir sua conta, <b>primeiro cancele a assinatura</b> na página Assinatura e depois tente novamente.',\n confirm: 'Ok, entendi',\n goToSubscription: 'Ir para assinatura',\n },\n twoFactor: {\n title: 'Autenticação de dois fatores',\n instructions:\n 'Instale um aplicativo autenticador no seu celular (ex.: <link>Google Authenticator</link>), escaneie o QR Code ao lado ou copie a chave no aplicativo e, em seguida, digite o código de 6 dígitos gerado para continuar.',\n qrAlt: 'QR Code para autenticação de dois fatores',\n retry: 'Tentar novamente',\n pasteDigits: 'Cole os 6 dígitos abaixo',\n activating: 'Ativando...',\n activate: 'Ativar autenticação',\n recoveryTitle: 'Códigos de segurança',\n recoveryHeading: 'Salve estes códigos de recuperação de emergência',\n recoveryText1:\n 'Se você perder acesso ao seu telefone, não será possível fazer login em sua conta sem um código de dois fatores.',\n recoveryText2: 'Imprima, copie ou escreva em um local seguro os códigos abaixo.',\n copyCodes: 'Copiar códigos',\n finish: 'Finalizar',\n codesCopied: 'Códigos copiados com sucesso',\n generateError: 'Erro ao gerar QR Code. Tente novamente.',\n confirmError: 'Erro ao confirmar código. Tente novamente.',\n disableTitle: 'Desabilitar autenticação 2FA',\n disableDescription:\n 'Informe o código de 6 dígitos do seu aplicativo autenticador para confirmar a desativação.',\n authenticatorCode: 'Código do autenticador',\n disabling: 'Desabilitando...',\n disable: 'Desabilitar 2FA',\n disabledSuccess: 'Autenticação de dois fatores desabilitada',\n disableError: 'Erro ao desabilitar 2FA. Tente novamente.',\n invalidCode: 'Código inválido',\n codeResent: 'Código reenviado',\n resendError: 'Erro ao reenviar código. Tente novamente.',\n },\n profile: {\n title: 'Meu perfil',\n avatarAlt: 'Foto do usuário',\n changePhoto: 'Alterar foto',\n name: 'Nome',\n namePlaceholder: 'Digite seu nome',\n lastName: 'Sobrenome',\n lastNamePlaceholder: 'Digite seu sobrenome',\n gender: 'Gênero',\n genderPlaceholder: 'Selecione seu gênero',\n genderOptions: {\n male: 'Masculino',\n female: 'Feminino',\n },\n phone: 'Telefone',\n change: 'Alterar',\n accessData: 'Dados de acesso',\n email: 'E-mail',\n savedSuccess: 'Perfil atualizado com sucesso',\n saveError: 'Erro ao atualizar perfil',\n },\n otp: {\n validationCode: 'Código de validação',\n incorrectCode: 'Código incorreto',\n resend: 'Reenviar código',\n resendIn: 'Reenviar em <b>{time}</b>',\n validating: 'Validando...',\n },\n changeEmail: {\n title: 'Alterar e-mail',\n confirm: 'Alterar e-mail',\n sentCodeTo: 'Enviamos um código de validação para o E-mail <b>{email}.</b>',\n updateTitle: 'Atualizar E-mail de contato',\n updateDescription: 'Informe o seu novo E-mail para manter seu contato atualizado.',\n newEmail: 'Novo e-mail',\n newEmailPlaceholder: 'Digite seu novo e-mail',\n emailChanged: 'E-mail alterado com sucesso',\n emailExistsError: 'E-mail já existente ou ocorreu um erro. Tente novamente mais tarde.',\n },\n changePhone: {\n titleEdit: 'Alterar telefone',\n titleAdd: 'Adicionar telefone',\n sentCodeTo: 'Enviamos um código de validação para o número atual <b>{phone}.</b>',\n confirm: 'Alterar telefone',\n updateTitle: 'Atualizar telefone de contato',\n addTitle: 'Adicionar telefone de contato',\n updateDescription: 'Informe o novo número para manter seu contato atualizado.',\n addDescription: 'Informe seu número de telefone para contato.',\n newNumber: 'Novo número',\n numberLabel: 'Número de telefone',\n phoneChanged: 'Telefone alterado',\n phoneAdded: 'Telefone adicionado',\n invalidNumber: 'Número de telefone inválido',\n saveError: 'Ocorreu um erro ao salvar o telefone. Tente novamente mais tarde.',\n numberExistsError: 'Número já existente ou ocorreu um erro. Tente novamente mais tarde.',\n },\n security: {\n title: 'Segurança',\n googleLinkedTitle: 'Conta Google vinculada',\n googleLinkedDescription:\n 'Sua conta está vinculada ao Google. Se desvincular, use \"Esqueci minha senha\" para redefinir uma senha de acesso por e-mail.',\n unlinking: 'Desvinculando...',\n unlinkGoogle: 'Desvincular Google',\n unlinkError: 'Erro ao desvincular conta Google.',\n deleteAccountDescription:\n 'Esta ação é permanente e não pode ser desfeita. Todos os seus dados, projetos e configurações serão removidos definitivamente.',\n deleteMyAccount: 'Excluir minha conta',\n },\n token: {\n title: 'Token da conta',\n label: 'Token',\n copySuccess: 'Token copiado com sucesso',\n copyError: 'Não foi possível copiar o token',\n info: 'Este token é exclusivo da sua conta e permite acesso à API. Não compartilhe com terceiros.',\n docsLink: 'Acessar a documentação',\n },\n changePassword: {\n title: 'Alterar senha',\n currentPassword: 'Senha atual',\n currentPasswordPlaceholder: 'Digite sua senha atual',\n newPassword: 'Nova senha',\n newPasswordPlaceholder: 'Digite sua nova senha',\n submit: 'Salvar nova senha',\n changeError: 'Erro ao alterar senha',\n changedSuccess: 'Senha alterada com sucesso',\n genericError: 'Erro ao alterar senha. Tente novamente.',\n },\n globalPreferences: {\n title: 'Alterar preferências globais',\n srDescription: 'Confirmação de alteração de preferências globais da conta',\n warning:\n 'Você está alterando configurações que impactam <b>todos os usuários da conta</b>. Deseja confirmar?',\n },\n configurations: {\n title: 'Configurações',\n },\n },\n\n // Modais de créditos de IA.\n credits: {\n buy: {\n title: 'Comprar créditos de IA',\n externalTitle: 'Créditos de IA',\n externalDescription: 'Para adquirir créditos de IA, acesse sua área de assinatura.',\n externalButton: 'Acessar área de assinatura',\n creditsOptionLabel: '{credits} créditos de IA',\n creditsOptionDisplayValue: '{credits} créditos de IA',\n paymentOnConfirm: 'O pagamento será processado no momento da confirmação.',\n nextInvoiceChanges: 'As alterações entrarão em vigor a partir da sua próxima fatura.',\n defaultPrice: 'Padrão',\n immediateCharge: 'Cobrança imediata',\n totalPlanValue: 'Valor total do plano',\n confirmAndPay: 'Confirmar e pagar',\n creditsChangedToast: 'Créditos de IA alterados para {credits}',\n },\n disabled: {\n title: 'Compra de créditos indisponível',\n descriptionLine1: 'Apenas administradores e proprietários podem comprar créditos de IA.',\n descriptionLine2:\n 'Peça a um administrador ou proprietário da conta para adquirir mais créditos.',\n understood: 'Entendi',\n },\n paidPlanRequired: {\n defaultTitle: 'Recurso disponível em planos pagos',\n defaultDescription: 'Para acessar este recurso, faça upgrade para um plano pago',\n knowPlans: 'Conhecer planos',\n },\n },\n\n // Cartões: adicionar, formulário, excluir, não-pode-excluir, item, info de pagamento.\n cards: {\n add: {\n stepBilling: 'Cobrança',\n stepCard: 'Cartão',\n externalTitle: 'Gerenciamento de cartões indisponível',\n externalDescription: 'Acesse sua área de assinatura para gerenciar formas de pagamento.',\n externalButton: 'Acessar área de assinatura',\n title: 'Adicionar cartão',\n billingHeading: 'Adicione suas informações de cobrança',\n cardHeading: 'Adicione informações do seu cartão',\n authenticating: 'Autenticando...',\n submitting: 'Adicionando cartão...',\n submit: 'Adicionar cartão',\n errorInitAuth: 'Não foi possível iniciar a autenticação do cartão, tente novamente.',\n errorAuth: 'Falha na autenticação do cartão.',\n errorAuthStatus: 'Autenticação não concluída (status: {status}).',\n statusUnknown: 'desconhecido',\n successToast: 'Cartão adicionado com sucesso.',\n errorSave: 'Não foi possível salvar o seu novo cartão, tente novamente.',\n },\n form: {\n nameOnCard: 'Nome impresso no cartão',\n typeHere: 'Digite aqui',\n cardNumber: 'Número do cartão',\n cardExpiry: 'Data de validade',\n cardCvc: 'CVC',\n country: 'País',\n select: 'Selecione',\n personType: 'Tipo de pessoa',\n personTypePf: 'Pessoa física',\n personTypePj: 'Pessoa jurídica',\n cpf: 'CPF',\n cnpj: 'CNPJ',\n fullName: 'Nome completo',\n cep: 'CEP',\n street: 'Endereço',\n streetNumber: 'Número',\n city: 'Cidade',\n state: 'UF',\n neighborhood: 'Bairro',\n complement: 'Complemento',\n cardNumberRequired: 'Número do cartão é obrigatório',\n cardExpiryRequired: 'Data de validade é obrigatória',\n cardCvcRequired: 'Código de segurança é obrigatório',\n },\n delete: {\n title: 'Excluir cartão',\n description: 'Deseja realmente excluir o cartão:',\n confirmLabel: 'Digite EXCLUIR abaixo',\n confirmPlaceholder: 'EXCLUIR',\n deleting: 'Excluindo...',\n successToast: 'O cartão •••• {digits} foi excluído com sucesso',\n errorToast: 'Não foi possível excluir o cartão',\n },\n cannotDelete: {\n title: 'Não é possível excluir este cartão',\n description: 'Este cartão está em uso e tem uma assinatura ativa vinculada a ele. Selecione outro cartão como padrão ou adicione um novo.',\n selectDefault: 'Selecione um cartão como padrão:',\n addNewCard: 'Adicionar novo cartão',\n errorUpdateCard: 'Erro ao atualizar cartão da assinatura',\n },\n item: {\n defaultBadge: 'Padrão',\n makeDefault: 'Tornar padrão',\n setDefaultSuccess: 'Cartão definido como padrão',\n setDefaultError: 'Erro ao definir cartão padrão',\n },\n paymentInfo: {\n email: 'E-mail',\n payment: 'Pagamento',\n addCard: 'Adicionar cartão',\n selectPaymentMethod: 'Selecione a forma de pagamento',\n manageCards: 'Gerenciar cartões',\n newPaymentMethod: 'Nova forma de pagamento',\n },\n },\n\n // Componentes de navegação: banners de assinatura, seletor de projeto, links de rodapé, créditos, plano.\n navigation: {\n banners: {\n cancelled: {\n message: 'Assinatura cancelada! Suas páginas foram retiradas do ar.',\n choosePlan: 'Escolher um novo plano',\n },\n overdue: {\n message: 'Sua assinatura está atrasada e suas páginas podem ser retiradas do ar a qualquer momento.',\n details: 'Detalhes',\n },\n pending: {\n message: 'Sua assinatura foi cancelada, você possui até {limitDate} com suas páginas online.',\n reactivate: 'Reativar assinatura',\n },\n upcoming: {\n message: 'Fatura em aberto. Pague até {dueDate} para evitar a suspensão das suas páginas.',\n details: 'Detalhes',\n },\n },\n projectSelector: {\n title: 'Projetos',\n searchPlaceholder: 'Busque aqui',\n emptyLine1: 'Nenhum projeto encontrado.',\n emptyLine2: 'Crie um projeto para começar.',\n noResults: 'Nenhum resultado encontrado.',\n manageProjects: 'Gerenciar projetos',\n },\n bottomLinks: {\n news: 'Novidades',\n helpCenter: 'Central de ajuda',\n sendSuggestions: 'Enviar sugestões',\n },\n creditsCard: {\n label: 'Créditos usados',\n },\n planCard: {\n knowPlans: 'Conheça os planos',\n },\n },\n\n // Nomes dos idiomas exibidos no seletor.\n // Planos: features e main features (mapApiPlanToUiPlan).\n plans: {\n features: {\n unlimitedVisits: 'Visitas ilimitadas',\n unlimitedLeads: 'Leads ilimitadas',\n sharePages: 'Compartilhar páginas',\n hosting: 'Hospedagem inclusa',\n freeTemplates: 'Templates gratuitos',\n onboarding: 'Reunião de Onboarding',\n projectManagement: 'Gestão de projetos',\n },\n mainFeatures: {\n pagesUnlimited: 'Páginas ilimitadas',\n pageSingular: '1 página',\n pagesPlural: '{count} páginas',\n domainsUnlimited: 'Domínios ilimitados',\n domainSingular: '1 domínio externo',\n domainsPlural: '{count} domínios externos',\n usersUnlimited: 'Usuários ilimitados',\n },\n },\n\n // Periodicidade de cobrança.\n periodicity: {\n monthly: 'Mensal',\n semiannual: 'Semestral',\n annual: 'Anual',\n suffixMonthly: '/mês',\n suffixSemiannual: '/semestre',\n suffixAnnual: '/ano',\n labelMonthly: 'mensal',\n labelSemiannual: 'semestral',\n labelAnnual: 'anual',\n },\n\n languages: {\n 'pt-br': 'Português (Brasil)',\n 'en-us': 'Inglês (EUA)',\n 'es-es': 'Espanhol',\n },\n\n // Componentes de formulário e entrada.\n forms: {\n combobox: {\n placeholder: 'Selecione uma opção',\n searchPlaceholder: 'Buscar...',\n emptyMessage: 'Nenhuma opção encontrada.',\n },\n datePicker: {\n placeholder: 'Selecione a data',\n },\n dateRangePicker: {\n placeholder: 'Selecione o período',\n },\n phoneInput: {\n optional: '(Opcional)',\n searchPlaceholder: 'Buscar país...',\n emptyMessage: 'Nenhum país encontrado',\n },\n select: {\n placeholder: 'Selecione uma opção',\n optional: '(Opcional)',\n },\n copyButton: {\n tooltipDefault: 'Copiar link',\n successDefault: 'Link copiado',\n errorMessage: 'Não foi possível copiar o link',\n },\n circularProgress: {\n ariaLabel: 'Progresso de exportação',\n },\n },\n\n // Componentes: ImageCropModal, ImageTooSmallModal.\n imageUpload: {\n cropTitle: 'Ajustar imagem',\n cropHint: 'Arraste para ajustar a área de corte',\n cropAlt: 'Crop',\n tooSmallTitleWithDimension: 'Foto menor que {dimensionText}',\n tooSmallTitleGeneric: 'Foto muito pequena',\n tooSmallBodyFileWithDimension: 'O arquivo \"{fileName}\" é menor que {dimensionText}. Faça envio de uma imagem com pelo menos {dimensionText} para continuar.',\n tooSmallBodyFileGeneric: 'O arquivo \"{fileName}\" é menor que o tamanho mínimo exigido. Faça envio de uma imagem maior para continuar.',\n tooSmallBodyNoFileWithDimension: 'A imagem selecionada é menor que {dimensionText}. Faça envio de uma imagem com pelo menos {dimensionText} para continuar.',\n tooSmallBodyNoFileGeneric: 'A imagem selecionada é menor que o tamanho mínimo exigido. Faça envio de uma imagem maior para continuar.',\n sendAnother: 'Enviar outra',\n errorSvg: 'Formato SVG não é suportado. Use PNG, JPEG, WebP ou GIF.',\n errorFormat: 'Formato não suportado. Use PNG, JPEG, WebP ou GIF.',\n errorTooLarge: 'Arquivo muito grande. Máximo {maxSize}MB.',\n },\n\n // Componentes: NotificationPageContent (Notifications.tsx), NotificationsPopover.tsx.\n notifications: {\n page: {\n title: 'Notificações',\n subtitle: 'Tenha controle total sobre páginas, experiências e conversões.',\n markAllReadDesktop: 'Marcar todos como lidos',\n markAllReadMobile: 'Marcar como lidos',\n tabAll: 'Todas as notificações',\n tabUnread: 'Não lidas',\n details: 'Detalhes',\n empty: 'Nenhuma notificação encontrada.',\n markAllSuccess: 'Todas as notificações foram marcadas como lidas',\n markAllError: 'Erro ao marcar notificações como lidas',\n },\n popover: {\n title: 'Últimas notificações',\n empty: 'Sem notificações por enquanto',\n viewAll: 'Todas as notificações',\n },\n },\n\n // Componentes: NavBar.tsx, ProfilePopover.tsx, UsersSelectorPopover.tsx.\n layout: {\n navbar: {\n expandMenu: 'Expandir menu',\n greatPages: 'GreatPages',\n pages: 'Páginas',\n },\n profile: {\n usedCredits: 'Créditos usados',\n loggingOut: 'Saindo da sua conta...',\n logout: 'Sair',\n },\n usersSelector: {\n title: 'Usuários',\n add: 'Adicionar',\n searchPlaceholder: 'Busque aqui',\n empty: 'Nenhum usuário encontrado.',\n noResults: 'Nenhum resultado encontrado.',\n addToProject: 'Adicionar ao projeto',\n removeFromProject: 'Remover do projeto',\n manageTeam: 'Gerenciar equipe',\n },\n },\n\n // Componente: NotFoundPage.tsx.\n notFound: {\n title: 'Página não foi encontrada!',\n description: 'A página que você está procurando não existe. Verifique se digitou corretamente o link que está procurando.',\n backToHome: 'Voltar para o início',\n },\n} as const;\n\nexport default messages;\n"],"mappings":"AAUA,MAAM,WAAW;AAAA;AAAA,EAEf,SAAS;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,IACV,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,EACV;AAAA;AAAA,EAGA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,cAAc;AAAA,IACd,cAAc;AAAA,EAChB;AAAA;AAAA,EAGA,aAAa;AAAA,IACX,OAAO;AAAA,IACP,aAAa;AAAA,IACb,wBAAwB;AAAA,IACxB,UAAU;AAAA,IACV,qBAAqB;AAAA,IACrB,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,qBAAqB;AAAA,IACrB,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,UAAU;AAAA,IACV,qBAAqB;AAAA,IACrB,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,uBAAuB;AAAA,IACvB,mBAAmB;AAAA,MACjB,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAAA,IACA,cAAc;AAAA,IACd,WAAW;AAAA,EACb;AAAA;AAAA,EAGA,SAAS;AAAA,IACP,mBAAmB;AAAA,MACjB,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,sBAAsB;AAAA,IACxB;AAAA,IACA,eAAe;AAAA,MACb,OAAO;AAAA,MACP,aACE;AAAA,MACF,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,wBAAwB;AAAA,MACxB,iBAAiB;AAAA,MACjB,eAAe;AAAA,MACf,qBAAqB;AAAA,MACrB,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,SAAS;AAAA,QACP,WAAW;AAAA,QACX,WAAW;AAAA,QACX,SAAS;AAAA,QACT,SAAS;AAAA,QACT,WAAW;AAAA,QACX,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,eAAe;AAAA,MACb,OAAO;AAAA,MACP,SACE;AAAA,MACF,gBAAgB;AAAA,MAChB,SAAS;AAAA,MACT,OAAO;AAAA,MACP,aAAa;AAAA,MACb,cAAc;AAAA,MACd,UAAU;AAAA,IACZ;AAAA,IACA,YAAY;AAAA,MACV,OAAO;AAAA,MACP,aACE;AAAA,MACF,SAAS;AAAA,MACT,kBAAkB;AAAA,IACpB;AAAA,IACA,WAAW;AAAA,MACT,OAAO;AAAA,MACP,cACE;AAAA,MACF,OAAO;AAAA,MACP,OAAO;AAAA,MACP,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,eACE;AAAA,MACF,eAAe;AAAA,MACf,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe;AAAA,MACf,cAAc;AAAA,MACd,cAAc;AAAA,MACd,oBACE;AAAA,MACF,mBAAmB;AAAA,MACnB,WAAW;AAAA,MACX,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,IACA,SAAS;AAAA,MACP,OAAO;AAAA,MACP,WAAW;AAAA,MACX,aAAa;AAAA,MACb,MAAM;AAAA,MACN,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,qBAAqB;AAAA,MACrB,QAAQ;AAAA,MACR,mBAAmB;AAAA,MACnB,eAAe;AAAA,QACb,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,MACA,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,cAAc;AAAA,MACd,WAAW;AAAA,IACb;AAAA,IACA,KAAK;AAAA,MACH,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,IACd;AAAA,IACA,aAAa;AAAA,MACX,OAAO;AAAA,MACP,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,UAAU;AAAA,MACV,qBAAqB;AAAA,MACrB,cAAc;AAAA,MACd,kBAAkB;AAAA,IACpB;AAAA,IACA,aAAa;AAAA,MACX,WAAW;AAAA,MACX,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,aAAa;AAAA,MACb,UAAU;AAAA,MACV,mBAAmB;AAAA,MACnB,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACX,aAAa;AAAA,MACb,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,WAAW;AAAA,MACX,mBAAmB;AAAA,IACrB;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,MACP,mBAAmB;AAAA,MACnB,yBACE;AAAA,MACF,WAAW;AAAA,MACX,cAAc;AAAA,MACd,aAAa;AAAA,MACb,0BACE;AAAA,MACF,iBAAiB;AAAA,IACnB;AAAA,IACA,OAAO;AAAA,MACL,OAAO;AAAA,MACP,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA,gBAAgB;AAAA,MACd,OAAO;AAAA,MACP,iBAAiB;AAAA,MACjB,4BAA4B;AAAA,MAC5B,aAAa;AAAA,MACb,wBAAwB;AAAA,MACxB,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,cAAc;AAAA,IAChB;AAAA,IACA,mBAAmB;AAAA,MACjB,OAAO;AAAA,MACP,eAAe;AAAA,MACf,SACE;AAAA,IACJ;AAAA,IACA,gBAAgB;AAAA,MACd,OAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA,EAGA,SAAS;AAAA,IACP,KAAK;AAAA,MACH,OAAO;AAAA,MACP,eAAe;AAAA,MACf,qBAAqB;AAAA,MACrB,gBAAgB;AAAA,MAChB,oBAAoB;AAAA,MACpB,2BAA2B;AAAA,MAC3B,kBAAkB;AAAA,MAClB,oBAAoB;AAAA,MACpB,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,qBAAqB;AAAA,IACvB;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,MACP,kBAAkB;AAAA,MAClB,kBACE;AAAA,MACF,YAAY;AAAA,IACd;AAAA,IACA,kBAAkB;AAAA,MAChB,cAAc;AAAA,MACd,oBAAoB;AAAA,MACpB,WAAW;AAAA,IACb;AAAA,EACF;AAAA;AAAA,EAGA,OAAO;AAAA,IACL,KAAK;AAAA,MACH,aAAa;AAAA,MACb,UAAU;AAAA,MACV,eAAe;AAAA,MACf,qBAAqB;AAAA,MACrB,gBAAgB;AAAA,MAChB,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,eAAe;AAAA,MACf,WAAW;AAAA,MACX,iBAAiB;AAAA,MACjB,eAAe;AAAA,MACf,cAAc;AAAA,MACd,WAAW;AAAA,IACb;AAAA,IACA,MAAM;AAAA,MACJ,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,cAAc;AAAA,MACd,KAAK;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,MAAM;AAAA,MACN,OAAO;AAAA,MACP,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,MACpB,iBAAiB;AAAA,IACnB;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,cAAc;AAAA,MACd,oBAAoB;AAAA,MACpB,UAAU;AAAA,MACV,cAAc;AAAA,MACd,YAAY;AAAA,IACd;AAAA,IACA,cAAc;AAAA,MACZ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,iBAAiB;AAAA,IACnB;AAAA,IACA,MAAM;AAAA,MACJ,cAAc;AAAA,MACd,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,iBAAiB;AAAA,IACnB;AAAA,IACA,aAAa;AAAA,MACX,OAAO;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA,MACT,qBAAqB;AAAA,MACrB,aAAa;AAAA,MACb,kBAAkB;AAAA,IACpB;AAAA,EACF;AAAA;AAAA,EAGA,YAAY;AAAA,IACV,SAAS;AAAA,MACP,WAAW;AAAA,QACT,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,SAAS;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,MACA,SAAS;AAAA,QACP,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,UAAU;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,OAAO;AAAA,MACP,mBAAmB;AAAA,MACnB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,gBAAgB;AAAA,IAClB;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,iBAAiB;AAAA,IACnB;AAAA,IACA,aAAa;AAAA,MACX,OAAO;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACR,WAAW;AAAA,IACb;AAAA,EACF;AAAA;AAAA;AAAA,EAIA,OAAO;AAAA,IACL,UAAU;AAAA,MACR,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,mBAAmB;AAAA,IACrB;AAAA,IACA,cAAc;AAAA,MACZ,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,gBAAgB;AAAA,IAClB;AAAA,EACF;AAAA;AAAA,EAGA,aAAa;AAAA,IACX,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,aAAa;AAAA,EACf;AAAA,EAEA,WAAW;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AAAA;AAAA,EAGA,OAAO;AAAA,IACL,UAAU;AAAA,MACR,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,cAAc;AAAA,IAChB;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,IACf;AAAA,IACA,iBAAiB;AAAA,MACf,aAAa;AAAA,IACf;AAAA,IACA,YAAY;AAAA,MACV,UAAU;AAAA,MACV,mBAAmB;AAAA,MACnB,cAAc;AAAA,IAChB;AAAA,IACA,QAAQ;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA,YAAY;AAAA,MACV,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,cAAc;AAAA,IAChB;AAAA,IACA,kBAAkB;AAAA,MAChB,WAAW;AAAA,IACb;AAAA,EACF;AAAA;AAAA,EAGA,aAAa;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,SAAS;AAAA,IACT,4BAA4B;AAAA,IAC5B,sBAAsB;AAAA,IACtB,+BAA+B;AAAA,IAC/B,yBAAyB;AAAA,IACzB,iCAAiC;AAAA,IACjC,2BAA2B;AAAA,IAC3B,aAAa;AAAA,IACb,UAAU;AAAA,IACV,aAAa;AAAA,IACb,eAAe;AAAA,EACjB;AAAA;AAAA,EAGA,eAAe;AAAA,IACb,MAAM;AAAA,MACJ,OAAO;AAAA,MACP,UAAU;AAAA,MACV,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,MACnB,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,SAAS;AAAA,MACT,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,cAAc;AAAA,IAChB;AAAA,IACA,SAAS;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,EACF;AAAA;AAAA,EAGA,QAAQ;AAAA,IACN,QAAQ;AAAA,MACN,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,IACA,SAAS;AAAA,MACP,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,QAAQ;AAAA,IACV;AAAA,IACA,eAAe;AAAA,MACb,OAAO;AAAA,MACP,KAAK;AAAA,MACL,mBAAmB;AAAA,MACnB,OAAO;AAAA,MACP,WAAW;AAAA,MACX,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,YAAY;AAAA,IACd;AAAA,EACF;AAAA;AAAA,EAGA,UAAU;AAAA,IACR,OAAO;AAAA,IACP,aAAa;AAAA,IACb,YAAY;AAAA,EACd;AACF;AAEA,IAAO,gBAAQ;","names":[]}
@@ -1,12 +0,0 @@
1
- function normalizeLocale(input) {
2
- if (!input) return null;
3
- const value = input.trim().toLowerCase();
4
- if (value.startsWith("pt")) return "pt-br";
5
- if (value.startsWith("es")) return "es-es";
6
- if (value.startsWith("en")) return "en-us";
7
- return null;
8
- }
9
- export {
10
- normalizeLocale
11
- };
12
- //# sourceMappingURL=normalize.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/i18n/normalize.ts"],"sourcesContent":["import { Locale } from './config';\n\n/**\n * Normaliza um identificador de idioma vindo da API (`user.language`, ex.: `pt-br`, `en`, `es`)\n * ou de um header BCP-47 (`pt-BR`, `en-US`, `es-419`) para um {@link Locale} suportado.\n * Retorna `null` quando não reconhece o idioma.\n */\nexport function normalizeLocale(input?: string | null): Locale | null {\n if (!input) return null;\n const value = input.trim().toLowerCase();\n if (value.startsWith('pt')) return 'pt-br';\n if (value.startsWith('es')) return 'es-es';\n if (value.startsWith('en')) return 'en-us';\n return null;\n}\n"],"mappings":"AAOO,SAAS,gBAAgB,OAAsC;AACpE,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,QAAQ,MAAM,KAAK,EAAE,YAAY;AACvC,MAAI,MAAM,WAAW,IAAI,EAAG,QAAO;AACnC,MAAI,MAAM,WAAW,IAAI,EAAG,QAAO;AACnC,MAAI,MAAM,WAAW,IAAI,EAAG,QAAO;AACnC,SAAO;AACT;","names":[]}
@@ -1,42 +0,0 @@
1
- import "server-only";
2
- import { cookies, headers } from "next/headers";
3
- import { DEFAULT_LOCALE, LOCALE_COOKIE } from "./config";
4
- import { localeFromCountry } from "./country-language";
5
- import { normalizeLocale } from "./normalize";
6
- const AUTH_COOKIE = "greatapps";
7
- const GEO_HEADER = "cf-ipcountry";
8
- const DEFAULT_WHITELABEL_ID = 1;
9
- function decodeJwtLocaleInfo(token) {
10
- if (!token) return null;
11
- try {
12
- const payload = JSON.parse(atob(token.split(".")[1]));
13
- return {
14
- id_wl: payload?.id_wl != null ? Number(payload.id_wl) : void 0,
15
- country: payload?.session?.location?.country ?? null
16
- };
17
- } catch {
18
- return null;
19
- }
20
- }
21
- async function resolveLocale(options = {}) {
22
- const cookieStore = await cookies();
23
- const token = process.env.DUMMY_AUTH_TOKEN || cookieStore.get(AUTH_COOKIE)?.value;
24
- const jwt = decodeJwtLocaleInfo(token);
25
- const whitelabelId = options.whitelabelId ?? jwt?.id_wl ?? null;
26
- if (whitelabelId != null && whitelabelId !== DEFAULT_WHITELABEL_ID) {
27
- return "pt-br";
28
- }
29
- const fromUser = normalizeLocale(options.userLanguage);
30
- if (fromUser) return fromUser;
31
- const fromCookie = normalizeLocale(cookieStore.get(LOCALE_COOKIE)?.value);
32
- if (fromCookie) return fromCookie;
33
- const headersList = await headers();
34
- const country = jwt?.country ?? headersList.get(GEO_HEADER);
35
- const fromGeo = localeFromCountry(country);
36
- if (fromGeo) return fromGeo;
37
- return DEFAULT_LOCALE;
38
- }
39
- export {
40
- resolveLocale
41
- };
42
- //# sourceMappingURL=resolve-locale.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/i18n/resolve-locale.ts"],"sourcesContent":["import 'server-only';\n\nimport { cookies, headers } from 'next/headers';\nimport { DEFAULT_LOCALE, Locale, LOCALE_COOKIE } from './config';\nimport { localeFromCountry } from './country-language';\nimport { normalizeLocale } from './normalize';\n\nconst AUTH_COOKIE = 'greatapps';\nconst GEO_HEADER = 'cf-ipcountry';\nconst DEFAULT_WHITELABEL_ID = 1;\n\ninterface JwtLocaleInfo {\n id_wl?: number;\n country?: string | null;\n}\n\n/** Lê id_wl e país do JWT sem custo de rede (best-effort). */\nfunction decodeJwtLocaleInfo(token?: string | null): JwtLocaleInfo | null {\n if (!token) return null;\n try {\n const payload = JSON.parse(atob(token.split('.')[1]));\n return {\n id_wl: payload?.id_wl != null ? Number(payload.id_wl) : undefined,\n country: payload?.session?.location?.country ?? null,\n };\n } catch {\n return null;\n }\n}\n\nexport interface ResolveLocaleOptions {\n /**\n * Whitelabel id já resolvido (ex.: via `findWhitelabel()`), com prioridade sobre o JWT.\n * Permite detectar domínio whitelabel mesmo para visitante não-logado.\n */\n whitelabelId?: number | null;\n /** Idioma da conta (`user.language`), quando já conhecido pelo chamador. */\n userLanguage?: string | null;\n}\n\n/**\n * Resolve o locale da requisição (server-side). Ordem de prioridade:\n *\n * 1. **Whitelabel não-padrão** (`id_wl != 1`) → `pt` (por enquanto, whitelabels não são localizadas).\n * 2. **Preferência da conta** (`userLanguage`), quando fornecida.\n * 3. **Cookie `NEXT_LOCALE`** — cache da preferência ou escolha manual do visitante.\n * 4. **Inferência por país** — JWT (`session.location.country`) ou header `CF-IPCountry`.\n * 5. **Fallback** → {@link DEFAULT_LOCALE}.\n */\nexport async function resolveLocale(options: ResolveLocaleOptions = {}): Promise<Locale> {\n const cookieStore = await cookies();\n const token = process.env.DUMMY_AUTH_TOKEN || cookieStore.get(AUTH_COOKIE)?.value;\n const jwt = decodeJwtLocaleInfo(token);\n\n // 1. Whitelabel não-padrão → português\n const whitelabelId = options.whitelabelId ?? jwt?.id_wl ?? null;\n if (whitelabelId != null && whitelabelId !== DEFAULT_WHITELABEL_ID) {\n return 'pt-br';\n }\n\n // 2. Preferência explícita da conta\n const fromUser = normalizeLocale(options.userLanguage);\n if (fromUser) return fromUser;\n\n // 3. Cookie persistido\n const fromCookie = normalizeLocale(cookieStore.get(LOCALE_COOKIE)?.value);\n if (fromCookie) return fromCookie;\n\n // 4. Inferência por país (geo)\n const headersList = await headers();\n const country = jwt?.country ?? headersList.get(GEO_HEADER);\n const fromGeo = localeFromCountry(country);\n if (fromGeo) return fromGeo;\n\n // 5. Fallback\n return DEFAULT_LOCALE;\n}\n"],"mappings":"AAAA,OAAO;AAEP,SAAS,SAAS,eAAe;AACjC,SAAS,gBAAwB,qBAAqB;AACtD,SAAS,yBAAyB;AAClC,SAAS,uBAAuB;AAEhC,MAAM,cAAc;AACpB,MAAM,aAAa;AACnB,MAAM,wBAAwB;AAQ9B,SAAS,oBAAoB,OAA6C;AACxE,MAAI,CAAC,MAAO,QAAO;AACnB,MAAI;AACF,UAAM,UAAU,KAAK,MAAM,KAAK,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;AACpD,WAAO;AAAA,MACL,OAAO,SAAS,SAAS,OAAO,OAAO,QAAQ,KAAK,IAAI;AAAA,MACxD,SAAS,SAAS,SAAS,UAAU,WAAW;AAAA,IAClD;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAqBA,eAAsB,cAAc,UAAgC,CAAC,GAAoB;AACvF,QAAM,cAAc,MAAM,QAAQ;AAClC,QAAM,QAAQ,QAAQ,IAAI,oBAAoB,YAAY,IAAI,WAAW,GAAG;AAC5E,QAAM,MAAM,oBAAoB,KAAK;AAGrC,QAAM,eAAe,QAAQ,gBAAgB,KAAK,SAAS;AAC3D,MAAI,gBAAgB,QAAQ,iBAAiB,uBAAuB;AAClE,WAAO;AAAA,EACT;AAGA,QAAM,WAAW,gBAAgB,QAAQ,YAAY;AACrD,MAAI,SAAU,QAAO;AAGrB,QAAM,aAAa,gBAAgB,YAAY,IAAI,aAAa,GAAG,KAAK;AACxE,MAAI,WAAY,QAAO;AAGvB,QAAM,cAAc,MAAM,QAAQ;AAClC,QAAM,UAAU,KAAK,WAAW,YAAY,IAAI,UAAU;AAC1D,QAAM,UAAU,kBAAkB,OAAO;AACzC,MAAI,QAAS,QAAO;AAGpB,SAAO;AACT;","names":[]}
package/dist/i18n.mjs DELETED
@@ -1,14 +0,0 @@
1
- import { LOCALES, DEFAULT_LOCALE, LOCALE_COOKIE, isLocale } from "./i18n/config";
2
- import { normalizeLocale } from "./i18n/normalize";
3
- import { localeFromCountry } from "./i18n/country-language";
4
- import { getCommonMessages } from "./i18n/messages";
5
- export {
6
- DEFAULT_LOCALE,
7
- LOCALES,
8
- LOCALE_COOKIE,
9
- getCommonMessages,
10
- isLocale,
11
- localeFromCountry,
12
- normalizeLocale
13
- };
14
- //# sourceMappingURL=i18n.mjs.map