@greatapps/common 1.1.665 → 1.1.667

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 (106) hide show
  1. package/dist/components/account/ConfigurationsMyAccountModal.mjs +8 -6
  2. package/dist/components/account/ConfigurationsMyAccountModal.mjs.map +1 -1
  3. package/dist/components/account/ConfirmDeleteAccountModal.mjs +20 -19
  4. package/dist/components/account/ConfirmDeleteAccountModal.mjs.map +1 -1
  5. package/dist/components/account/ConfirmGlobalPreferencesModal.mjs +10 -11
  6. package/dist/components/account/ConfirmGlobalPreferencesModal.mjs.map +1 -1
  7. package/dist/components/account/DeleteAccountModal.mjs +34 -28
  8. package/dist/components/account/DeleteAccountModal.mjs.map +1 -1
  9. package/dist/components/account/DisableTwoFactorAuthModal.mjs +7 -5
  10. package/dist/components/account/DisableTwoFactorAuthModal.mjs.map +1 -1
  11. package/dist/components/account/IsntPossibleDeleteAccountModal.mjs +8 -9
  12. package/dist/components/account/IsntPossibleDeleteAccountModal.mjs.map +1 -1
  13. package/dist/components/account/TwoFactorAuthModal.mjs +22 -23
  14. package/dist/components/account/TwoFactorAuthModal.mjs.map +1 -1
  15. package/dist/components/account/hooks/useChangeEmailForm.mjs +5 -3
  16. package/dist/components/account/hooks/useChangeEmailForm.mjs.map +1 -1
  17. package/dist/components/account/hooks/useChangePasswordForm.mjs +26 -3
  18. package/dist/components/account/hooks/useChangePasswordForm.mjs.map +1 -1
  19. package/dist/components/account/hooks/useChangePhoneForm.mjs +18 -9
  20. package/dist/components/account/hooks/useChangePhoneForm.mjs.map +1 -1
  21. package/dist/components/account/hooks/useDisableTwoFactorAuthForm.mjs +26 -3
  22. package/dist/components/account/hooks/useDisableTwoFactorAuthForm.mjs.map +1 -1
  23. package/dist/components/account/hooks/useOtpVerification.mjs +19 -3
  24. package/dist/components/account/hooks/useOtpVerification.mjs.map +1 -1
  25. package/dist/components/account/hooks/useTwoFactorAuthForm.mjs +27 -4
  26. package/dist/components/account/hooks/useTwoFactorAuthForm.mjs.map +1 -1
  27. package/dist/components/account/sections/ChangeEmailModal.mjs +25 -28
  28. package/dist/components/account/sections/ChangeEmailModal.mjs.map +1 -1
  29. package/dist/components/account/sections/ChangePasswordSection.mjs +8 -6
  30. package/dist/components/account/sections/ChangePasswordSection.mjs.map +1 -1
  31. package/dist/components/account/sections/ChangePhoneModal.mjs +24 -27
  32. package/dist/components/account/sections/ChangePhoneModal.mjs.map +1 -1
  33. package/dist/components/account/sections/MyProfileSection.mjs +30 -21
  34. package/dist/components/account/sections/MyProfileSection.mjs.map +1 -1
  35. package/dist/components/account/sections/PreferencesSection.mjs +41 -23
  36. package/dist/components/account/sections/PreferencesSection.mjs.map +1 -1
  37. package/dist/components/account/sections/SecuritySection.mjs +11 -9
  38. package/dist/components/account/sections/SecuritySection.mjs.map +1 -1
  39. package/dist/components/account/sections/TokenSection.mjs +24 -8
  40. package/dist/components/account/sections/TokenSection.mjs.map +1 -1
  41. package/dist/components/embeds/CrispEmbed.mjs +9 -6
  42. package/dist/components/embeds/CrispEmbed.mjs.map +1 -1
  43. package/dist/i18n/config.mjs +13 -0
  44. package/dist/i18n/config.mjs.map +1 -0
  45. package/dist/i18n/country-language.mjs +74 -0
  46. package/dist/i18n/country-language.mjs.map +1 -0
  47. package/dist/i18n/messages/en-us.mjs +211 -0
  48. package/dist/i18n/messages/en-us.mjs.map +1 -0
  49. package/dist/i18n/messages/es-es.mjs +211 -0
  50. package/dist/i18n/messages/es-es.mjs.map +1 -0
  51. package/dist/i18n/messages/index.mjs +16 -0
  52. package/dist/i18n/messages/index.mjs.map +1 -0
  53. package/dist/i18n/messages/pt-br.mjs +216 -0
  54. package/dist/i18n/messages/pt-br.mjs.map +1 -0
  55. package/dist/i18n/normalize.mjs +12 -0
  56. package/dist/i18n/normalize.mjs.map +1 -0
  57. package/dist/i18n/resolve-locale.mjs +42 -0
  58. package/dist/i18n/resolve-locale.mjs.map +1 -0
  59. package/dist/i18n.mjs +14 -0
  60. package/dist/i18n.mjs.map +1 -0
  61. package/dist/providers/auth.provider.mjs +9 -1
  62. package/dist/providers/auth.provider.mjs.map +1 -1
  63. package/dist/server.mjs +2 -0
  64. package/dist/server.mjs.map +1 -1
  65. package/dist/utils/intl/cookie-domain.mjs +17 -0
  66. package/dist/utils/intl/cookie-domain.mjs.map +1 -0
  67. package/dist/utils/intl/locale-cookie.mjs +13 -0
  68. package/dist/utils/intl/locale-cookie.mjs.map +1 -0
  69. package/dist/utils/intl/locales.mjs +3 -2
  70. package/dist/utils/intl/locales.mjs.map +1 -1
  71. package/package.json +7 -1
  72. package/src/components/account/ConfigurationsMyAccountModal.tsx +10 -6
  73. package/src/components/account/ConfirmDeleteAccountModal.tsx +22 -13
  74. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +12 -10
  75. package/src/components/account/DeleteAccountModal.tsx +34 -24
  76. package/src/components/account/DisableTwoFactorAuthModal.tsx +11 -6
  77. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +8 -6
  78. package/src/components/account/TwoFactorAuthModal.tsx +33 -29
  79. package/src/components/account/hooks/useChangeEmailForm.tsx +5 -3
  80. package/src/components/account/hooks/useChangePasswordForm.tsx +20 -6
  81. package/src/components/account/hooks/useChangePhoneForm.tsx +16 -10
  82. package/src/components/account/hooks/useDisableTwoFactorAuthForm.tsx +20 -6
  83. package/src/components/account/hooks/useOtpVerification.tsx +16 -4
  84. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +21 -7
  85. package/src/components/account/sections/ChangeEmailModal.tsx +35 -21
  86. package/src/components/account/sections/ChangePasswordSection.tsx +10 -6
  87. package/src/components/account/sections/ChangePhoneModal.tsx +50 -22
  88. package/src/components/account/sections/MyProfileSection.tsx +30 -22
  89. package/src/components/account/sections/PreferencesSection.tsx +45 -24
  90. package/src/components/account/sections/SecuritySection.tsx +19 -10
  91. package/src/components/account/sections/TokenSection.tsx +22 -10
  92. package/src/components/embeds/CrispEmbed.tsx +12 -8
  93. package/src/i18n/config.ts +17 -0
  94. package/src/i18n/country-language.ts +60 -0
  95. package/src/i18n/messages/en-us.ts +226 -0
  96. package/src/i18n/messages/es-es.ts +227 -0
  97. package/src/i18n/messages/index.ts +24 -0
  98. package/src/i18n/messages/pt-br.ts +236 -0
  99. package/src/i18n/normalize.ts +15 -0
  100. package/src/i18n/resolve-locale.ts +77 -0
  101. package/src/i18n.ts +10 -0
  102. package/src/providers/auth.provider.tsx +13 -1
  103. package/src/server.ts +2 -0
  104. package/src/utils/intl/cookie-domain.ts +29 -0
  105. package/src/utils/intl/locale-cookie.ts +18 -0
  106. package/src/utils/intl/locales.ts +3 -2
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/i18n/messages/en-us.ts"],"sourcesContent":["/**\n * en-us translation catalog for @greatapps/common components.\n * Consumer apps merge this object under the `common` namespace.\n * Mirror the module structure of `pt-br.ts` (the source of truth).\n */\nconst messages = {\n actions: {\n save: 'Save',\n saveChanges: 'Save changes',\n cancel: 'Cancel',\n confirm: 'Confirm',\n delete: 'Delete',\n edit: 'Edit',\n close: 'Close',\n back: 'Back',\n continue: 'Continue',\n add: 'Add',\n remove: 'Remove',\n search: 'Search',\n loading: 'Loading...',\n saving: 'Saving...',\n sending: 'Sending...',\n copy: 'Copy',\n copied: 'Copied',\n },\n\n validations: {\n required: 'Required field',\n invalidEmail: 'Invalid email',\n invalidPhone: 'Invalid phone number',\n },\n\n preferences: {\n title: 'Preferences',\n companyName: 'Company name',\n companyNamePlaceholder: 'Enter the company name',\n language: 'Language',\n languagePlaceholder: 'Select the language',\n languageSearch: 'Search language...',\n currency: 'Currency',\n currencyPlaceholder: 'Select the currency',\n currencySearch: 'Search currency...',\n timeDisplay: 'Time display',\n timezone: 'Time zone',\n timezonePlaceholder: 'Select the time zone',\n timezoneSearch: 'Search time zone...',\n timeFormat: 'Time format',\n timeFormatPlaceholder: 'Select the format',\n savedSuccess: 'Preferences saved successfully',\n saveError: 'Error saving preferences',\n },\n\n account: {\n deleteAccount: {\n title: 'Delete account',\n description:\n 'This action is <b>irreversible</b>. By confirming, your account and all your data will be deleted.',\n reasonLabel: 'Reason for cancellation',\n reasonPlaceholder: 'Select',\n descriptionLabel: 'Describe what led you to make this decision',\n descriptionPlaceholder: 'Explain your decision...',\n charactersCount: '{count}/400 characters',\n passwordLabel: 'Password',\n passwordPlaceholder: 'Enter your password',\n submit: 'Delete account',\n requiredFields: 'Fill in all required fields',\n reasons: {\n noFeature: 'The tool lacks a feature I need',\n technical: 'I encountered technical issues or errors in the system',\n support: 'I had issues with support or customer service',\n updates: 'Updates take longer than expected',\n temporary: 'The cancellation is temporary',\n other: 'Other reason',\n },\n },\n confirmDelete: {\n title: 'Sorry to see you go!',\n warning:\n 'All your <b>{count} pages</b> will be permanently deleted. This action is <b>irreversible!</b>',\n sessionExpired: 'Session expired. Fill in the fields again.',\n success: 'Account deleted successfully',\n error: 'Error deleting account. Please try again.',\n keepAccount: 'Keep my account',\n deleteAnyway: 'Delete anyway',\n deleting: 'Deleting...',\n },\n cantDelete: {\n title: 'Unable to delete account',\n description:\n 'You have an active subscription. To delete your account, <b>first cancel your subscription</b> on the Subscription page and then try again.',\n confirm: 'Ok, I understand',\n goToSubscription: 'Go to subscription',\n },\n twoFactor: {\n title: 'Two-factor authentication',\n instructions:\n 'Install an authenticator app on your mobile device (e.g., <link>Google Authenticator</link>), scan the QR Code on the side or copy the key in the app, and then enter the 6-digit code generated to continue.',\n qrAlt: 'QR Code for two-factor authentication',\n retry: 'Try again',\n pasteDigits: 'Paste the 6 digits below',\n activating: 'Activating...',\n activate: 'Activate authentication',\n recoveryTitle: 'Security codes',\n recoveryHeading: 'Save these emergency recovery codes',\n recoveryText1:\n 'If you lose access to your phone, you will not be able to log into your account without a two-factor code.',\n recoveryText2: 'Print, copy, or write the codes below in a safe location.',\n copyCodes: 'Copy codes',\n finish: 'Finish',\n codesCopied: 'Codes copied successfully',\n generateError: 'Error generating QR Code. Try again.',\n confirmError: 'Error confirming code. Try again.',\n disableTitle: 'Disable 2FA authentication',\n disableDescription:\n 'Enter the 6-digit code from your authenticator app to confirm disabling.',\n authenticatorCode: 'Authenticator code',\n disabling: 'Disabling...',\n disable: 'Disable 2FA',\n disabledSuccess: 'Two-factor authentication disabled',\n disableError: 'Error disabling 2FA. Try again.',\n invalidCode: 'Invalid code',\n codeResent: 'Code resent',\n resendError: 'Error resending code. Try again.',\n },\n profile: {\n title: 'My profile',\n avatarAlt: 'User photo',\n changePhoto: 'Change photo',\n name: 'First name',\n namePlaceholder: 'Enter your first name',\n lastName: 'Last name',\n lastNamePlaceholder: 'Enter your last name',\n gender: 'Gender',\n genderPlaceholder: 'Select your gender',\n phone: 'Phone',\n change: 'Change',\n accessData: 'Access data',\n email: 'Email',\n savedSuccess: 'Profile updated successfully',\n saveError: 'Error updating profile',\n },\n otp: {\n validationCode: 'Validation code',\n incorrectCode: 'Incorrect code',\n resend: 'Resend code',\n resendIn: 'Resend in <b>{time}</b>',\n validating: 'Validating...',\n },\n changeEmail: {\n title: 'Change email',\n confirm: 'Change email',\n sentCodeTo: 'We sent a validation code to email <b>{email}.</b>',\n updateTitle: 'Update contact email',\n updateDescription: 'Enter your new email to keep your contact information updated.',\n newEmail: 'New email',\n newEmailPlaceholder: 'Enter your new email',\n emailChanged: 'Email changed successfully',\n emailExistsError: 'Email already exists or an error occurred. Please try again later.',\n },\n changePhone: {\n titleEdit: 'Change phone',\n titleAdd: 'Add phone',\n sentCodeTo: 'We sent a validation code to your current number <b>{phone}.</b>',\n confirm: 'Change phone',\n updateTitle: 'Update contact phone',\n addTitle: 'Add contact phone',\n updateDescription: 'Enter the new number to keep your contact information updated.',\n addDescription: 'Enter your phone number for contact.',\n newNumber: 'New number',\n numberLabel: 'Phone number',\n phoneChanged: 'Phone changed',\n phoneAdded: 'Phone added',\n invalidNumber: 'Invalid phone number',\n saveError: 'An error occurred while saving the phone number. Please try again later.',\n numberExistsError: 'Number already exists or an error occurred. Please try again later.',\n },\n security: {\n title: 'Security',\n googleLinkedTitle: 'Google account linked',\n googleLinkedDescription:\n 'Your account is linked to Google. If you unlink it, use \"Forgot my password\" to reset an email access password.',\n unlinking: 'Unlinking...',\n unlinkGoogle: 'Unlink Google',\n unlinkError: 'Error unlinking Google account.',\n deleteAccountDescription:\n 'This action is permanent and cannot be undone. All your data, projects, and settings will be permanently removed.',\n deleteMyAccount: 'Delete my account',\n },\n token: {\n title: 'Account token',\n label: 'Token',\n copySuccess: 'Token copied successfully',\n copyError: 'Failed to copy token',\n info: 'This token is unique to your account and allows API access. Do not share with third parties.',\n docsLink: 'Access documentation',\n },\n changePassword: {\n title: 'Change password',\n currentPassword: 'Current password',\n currentPasswordPlaceholder: 'Enter your current password',\n newPassword: 'New password',\n newPasswordPlaceholder: 'Enter your new password',\n submit: 'Save new password',\n changeError: 'Error changing password',\n changedSuccess: 'Password changed successfully',\n genericError: 'Error changing password. Try again.',\n },\n globalPreferences: {\n title: 'Change global preferences',\n srDescription: 'Confirmation of global account preferences change',\n warning:\n 'You are changing settings that impact <b>all account users</b>. Do you want to confirm?',\n },\n configurations: {\n title: 'Settings',\n },\n },\n\n languages: {\n 'pt-br': 'Portuguese (Brazil)',\n 'en-us': 'English (US)',\n 'es-es': 'Spanish',\n },\n} as const;\n\nexport default messages;\n"],"mappings":"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","names":[]}
@@ -0,0 +1,211 @@
1
+ const messages = {
2
+ actions: {
3
+ save: "Guardar",
4
+ saveChanges: "Guardar cambios",
5
+ cancel: "Cancelar",
6
+ confirm: "Confirmar",
7
+ delete: "Eliminar",
8
+ edit: "Editar",
9
+ close: "Cerrar",
10
+ back: "Volver",
11
+ continue: "Continuar",
12
+ add: "Agregar",
13
+ remove: "Quitar",
14
+ search: "Buscar",
15
+ loading: "Cargando...",
16
+ saving: "Guardando...",
17
+ sending: "Enviando...",
18
+ copy: "Copiar",
19
+ copied: "Copiado"
20
+ },
21
+ validations: {
22
+ required: "Campo obligatorio",
23
+ invalidEmail: "Correo electr\xF3nico inv\xE1lido",
24
+ invalidPhone: "Tel\xE9fono inv\xE1lido"
25
+ },
26
+ preferences: {
27
+ title: "Preferencias",
28
+ companyName: "Nombre de la empresa",
29
+ companyNamePlaceholder: "Ingrese el nombre de la empresa",
30
+ language: "Idioma",
31
+ languagePlaceholder: "Seleccione el idioma",
32
+ languageSearch: "Buscar idioma...",
33
+ currency: "Moneda",
34
+ currencyPlaceholder: "Seleccione la moneda",
35
+ currencySearch: "Buscar moneda...",
36
+ timeDisplay: "Visualizaci\xF3n de hora",
37
+ timezone: "Zona horaria",
38
+ timezonePlaceholder: "Seleccione la zona horaria",
39
+ timezoneSearch: "Buscar zona horaria...",
40
+ timeFormat: "Formato de hora",
41
+ timeFormatPlaceholder: "Seleccione el formato",
42
+ savedSuccess: "Preferencias guardadas con \xE9xito",
43
+ saveError: "Error al guardar las preferencias"
44
+ },
45
+ account: {
46
+ deleteAccount: {
47
+ title: "Eliminar cuenta",
48
+ description: "Esta acci\xF3n es <b>irreversible</b>. Al confirmar, su cuenta y todos sus datos ser\xE1n eliminados.",
49
+ reasonLabel: "Motivo de la cancelaci\xF3n",
50
+ reasonPlaceholder: "Seleccionar",
51
+ descriptionLabel: "Describa qu\xE9 lo llev\xF3 a tomar esta decisi\xF3n",
52
+ descriptionPlaceholder: "Explique su decisi\xF3n...",
53
+ charactersCount: "{count}/400 caracteres",
54
+ passwordLabel: "Contrase\xF1a",
55
+ passwordPlaceholder: "Ingrese su contrase\xF1a",
56
+ submit: "Eliminar cuenta",
57
+ requiredFields: "Complete todos los campos obligatorios",
58
+ reasons: {
59
+ noFeature: "La herramienta no tiene una funci\xF3n que necesito",
60
+ technical: "Encontr\xE9 problemas t\xE9cnicos o errores en el sistema",
61
+ support: "Tuve problemas con el soporte o atenci\xF3n al cliente",
62
+ updates: "Las actualizaciones tardan m\xE1s de lo esperado",
63
+ temporary: "La cancelaci\xF3n es temporal",
64
+ other: "Otro motivo"
65
+ }
66
+ },
67
+ confirmDelete: {
68
+ title: "\xA1Qu\xE9 pena verte partir!",
69
+ warning: "Todas sus <b>{count} p\xE1ginas</b> ser\xE1n eliminadas permanentemente. \xA1Esta acci\xF3n es <b>irreversible!</b>",
70
+ sessionExpired: "Sesi\xF3n expirada. Complete los campos nuevamente.",
71
+ success: "Cuenta eliminada exitosamente",
72
+ error: "Error al eliminar la cuenta. Intente nuevamente.",
73
+ keepAccount: "Mantener mi cuenta",
74
+ deleteAnyway: "Eliminar de todas formas",
75
+ deleting: "Eliminando..."
76
+ },
77
+ cantDelete: {
78
+ title: "No es posible eliminar la cuenta",
79
+ description: "Tiene una suscripci\xF3n activa. Para eliminar su cuenta, <b>primero cancele su suscripci\xF3n</b> en la p\xE1gina Suscripci\xF3n e intente nuevamente.",
80
+ confirm: "Ok, entendido",
81
+ goToSubscription: "Ir a suscripci\xF3n"
82
+ },
83
+ twoFactor: {
84
+ title: "Autenticaci\xF3n de dos factores",
85
+ instructions: "Instale una aplicaci\xF3n autenticadora en su dispositivo m\xF3vil (p. ej., <link>Google Authenticator</link>), escanee el c\xF3digo QR al lado o copie la clave en la aplicaci\xF3n y, a continuaci\xF3n, ingrese el c\xF3digo de 6 d\xEDgitos generado para continuar.",
86
+ qrAlt: "C\xF3digo QR para autenticaci\xF3n de dos factores",
87
+ retry: "Intentar de nuevo",
88
+ pasteDigits: "Pegue los 6 d\xEDgitos abajo",
89
+ activating: "Activando...",
90
+ activate: "Activar autenticaci\xF3n",
91
+ recoveryTitle: "C\xF3digos de seguridad",
92
+ recoveryHeading: "Guarde estos c\xF3digos de recuperaci\xF3n de emergencia",
93
+ recoveryText1: "Si pierde acceso a su tel\xE9fono, no podr\xE1 iniciar sesi\xF3n en su cuenta sin un c\xF3digo de dos factores.",
94
+ recoveryText2: "Imprima, copie o escriba los c\xF3digos a continuaci\xF3n en un lugar seguro.",
95
+ copyCodes: "Copiar c\xF3digos",
96
+ finish: "Finalizar",
97
+ codesCopied: "C\xF3digos copiados correctamente",
98
+ generateError: "Error al generar el c\xF3digo QR. Intente de nuevo.",
99
+ confirmError: "Error al confirmar el c\xF3digo. Intente de nuevo.",
100
+ disableTitle: "Desactivar autenticaci\xF3n 2FA",
101
+ disableDescription: "Ingrese el c\xF3digo de 6 d\xEDgitos de su aplicaci\xF3n autenticadora para confirmar la desactivaci\xF3n.",
102
+ authenticatorCode: "C\xF3digo del autenticador",
103
+ disabling: "Desactivando...",
104
+ disable: "Desactivar 2FA",
105
+ disabledSuccess: "Autenticaci\xF3n de dos factores desactivada",
106
+ disableError: "Error al desactivar 2FA. Intente de nuevo.",
107
+ invalidCode: "C\xF3digo inv\xE1lido",
108
+ codeResent: "C\xF3digo reenviado",
109
+ resendError: "Error al reenviar el c\xF3digo. Intente de nuevo."
110
+ },
111
+ profile: {
112
+ title: "Mi perfil",
113
+ avatarAlt: "Foto del usuario",
114
+ changePhoto: "Cambiar foto",
115
+ name: "Nombre",
116
+ namePlaceholder: "Ingrese su nombre",
117
+ lastName: "Apellido",
118
+ lastNamePlaceholder: "Ingrese su apellido",
119
+ gender: "G\xE9nero",
120
+ genderPlaceholder: "Seleccione su g\xE9nero",
121
+ phone: "Tel\xE9fono",
122
+ change: "Cambiar",
123
+ accessData: "Datos de acceso",
124
+ email: "Correo electr\xF3nico",
125
+ savedSuccess: "Perfil actualizado exitosamente",
126
+ saveError: "Error al actualizar el perfil"
127
+ },
128
+ otp: {
129
+ validationCode: "C\xF3digo de validaci\xF3n",
130
+ incorrectCode: "C\xF3digo incorrecto",
131
+ resend: "Reenviar c\xF3digo",
132
+ resendIn: "Reenviar en <b>{time}</b>",
133
+ validating: "Validando..."
134
+ },
135
+ changeEmail: {
136
+ title: "Cambiar correo electr\xF3nico",
137
+ confirm: "Cambiar correo electr\xF3nico",
138
+ sentCodeTo: "Enviamos un c\xF3digo de validaci\xF3n al correo electr\xF3nico <b>{email}.</b>",
139
+ updateTitle: "Actualizar correo electr\xF3nico de contacto",
140
+ updateDescription: "Indique su nuevo correo electr\xF3nico para mantener su informaci\xF3n de contacto actualizada.",
141
+ newEmail: "Nuevo correo electr\xF3nico",
142
+ newEmailPlaceholder: "Ingrese su nuevo correo electr\xF3nico",
143
+ emailChanged: "Correo electr\xF3nico cambiado exitosamente",
144
+ emailExistsError: "El correo electr\xF3nico ya existe o ocurri\xF3 un error. Intente m\xE1s tarde."
145
+ },
146
+ changePhone: {
147
+ titleEdit: "Cambiar tel\xE9fono",
148
+ titleAdd: "Agregar tel\xE9fono",
149
+ sentCodeTo: "Enviamos un c\xF3digo de validaci\xF3n al n\xFAmero actual <b>{phone}.</b>",
150
+ confirm: "Cambiar tel\xE9fono",
151
+ updateTitle: "Actualizar tel\xE9fono de contacto",
152
+ addTitle: "Agregar tel\xE9fono de contacto",
153
+ updateDescription: "Indique el nuevo n\xFAmero para mantener su informaci\xF3n de contacto actualizada.",
154
+ addDescription: "Indique su n\xFAmero de tel\xE9fono para contacto.",
155
+ newNumber: "Nuevo n\xFAmero",
156
+ numberLabel: "N\xFAmero de tel\xE9fono",
157
+ phoneChanged: "Tel\xE9fono cambiado",
158
+ phoneAdded: "Tel\xE9fono agregado",
159
+ invalidNumber: "N\xFAmero de tel\xE9fono inv\xE1lido",
160
+ saveError: "Ocurri\xF3 un error al guardar el n\xFAmero de tel\xE9fono. Intente m\xE1s tarde.",
161
+ numberExistsError: "El n\xFAmero ya existe o ocurri\xF3 un error. Intente m\xE1s tarde."
162
+ },
163
+ security: {
164
+ title: "Seguridad",
165
+ googleLinkedTitle: "Cuenta Google vinculada",
166
+ googleLinkedDescription: 'Su cuenta est\xE1 vinculada a Google. Si la desvincula, utilice "Olvid\xE9 mi contrase\xF1a" para restablecer una contrase\xF1a de acceso por correo electr\xF3nico.',
167
+ unlinking: "Desvinculando...",
168
+ unlinkGoogle: "Desvincular Google",
169
+ unlinkError: "Error al desvincular la cuenta Google.",
170
+ deleteAccountDescription: "Esta acci\xF3n es permanente y no se puede deshacer. Todos sus datos, proyectos y configuraciones ser\xE1n eliminados permanentemente.",
171
+ deleteMyAccount: "Eliminar mi cuenta"
172
+ },
173
+ token: {
174
+ title: "Token de la cuenta",
175
+ label: "Token",
176
+ copySuccess: "Token copiado correctamente",
177
+ copyError: "No se pudo copiar el token",
178
+ info: "Este token es exclusivo de su cuenta y permite el acceso a la API. No lo comparta con terceros.",
179
+ docsLink: "Acceder a la documentaci\xF3n"
180
+ },
181
+ changePassword: {
182
+ title: "Cambiar contrase\xF1a",
183
+ currentPassword: "Contrase\xF1a actual",
184
+ currentPasswordPlaceholder: "Ingrese su contrase\xF1a actual",
185
+ newPassword: "Nueva contrase\xF1a",
186
+ newPasswordPlaceholder: "Ingrese su nueva contrase\xF1a",
187
+ submit: "Guardar nueva contrase\xF1a",
188
+ changeError: "Error al cambiar la contrase\xF1a",
189
+ changedSuccess: "Contrase\xF1a cambiada correctamente",
190
+ genericError: "Error al cambiar la contrase\xF1a. Intente nuevamente."
191
+ },
192
+ globalPreferences: {
193
+ title: "Cambiar preferencias globales",
194
+ srDescription: "Confirmaci\xF3n de cambio de preferencias globales de la cuenta",
195
+ warning: "Est\xE1 cambiando configuraciones que impactan <b>todos los usuarios de la cuenta</b>. \xBFDesea confirmar?"
196
+ },
197
+ configurations: {
198
+ title: "Configuraci\xF3n"
199
+ }
200
+ },
201
+ languages: {
202
+ "pt-br": "Portugu\xE9s (Brasil)",
203
+ "en-us": "Ingl\xE9s (EE. UU.)",
204
+ "es-es": "Espa\xF1ol"
205
+ }
206
+ };
207
+ var es_es_default = messages;
208
+ export {
209
+ es_es_default as default
210
+ };
211
+ //# sourceMappingURL=es-es.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/i18n/messages/es-es.ts"],"sourcesContent":["/**\n * Catálogo de traducción es-es para los componentes de @greatapps/common.\n * Las apps consumidoras combinan este objeto bajo el namespace `common`.\n * Refleja la estructura de módulos de `pt-br.ts` (la fuente de verdad).\n */\nconst messages = {\n actions: {\n save: 'Guardar',\n saveChanges: 'Guardar cambios',\n cancel: 'Cancelar',\n confirm: 'Confirmar',\n delete: 'Eliminar',\n edit: 'Editar',\n close: 'Cerrar',\n back: 'Volver',\n continue: 'Continuar',\n add: 'Agregar',\n remove: 'Quitar',\n search: 'Buscar',\n loading: 'Cargando...',\n saving: 'Guardando...',\n sending: 'Enviando...',\n copy: 'Copiar',\n copied: 'Copiado',\n },\n\n validations: {\n required: 'Campo obligatorio',\n invalidEmail: 'Correo electrónico inválido',\n invalidPhone: 'Teléfono inválido',\n },\n\n preferences: {\n title: 'Preferencias',\n companyName: 'Nombre de la empresa',\n companyNamePlaceholder: 'Ingrese el nombre de la empresa',\n language: 'Idioma',\n languagePlaceholder: 'Seleccione el idioma',\n languageSearch: 'Buscar idioma...',\n currency: 'Moneda',\n currencyPlaceholder: 'Seleccione la moneda',\n currencySearch: 'Buscar moneda...',\n timeDisplay: 'Visualización de hora',\n timezone: 'Zona horaria',\n timezonePlaceholder: 'Seleccione la zona horaria',\n timezoneSearch: 'Buscar zona horaria...',\n timeFormat: 'Formato de hora',\n timeFormatPlaceholder: 'Seleccione el formato',\n savedSuccess: 'Preferencias guardadas con éxito',\n saveError: 'Error al guardar las preferencias',\n },\n\n account: {\n deleteAccount: {\n title: 'Eliminar cuenta',\n description:\n 'Esta acción es <b>irreversible</b>. Al confirmar, su cuenta y todos sus datos serán eliminados.',\n reasonLabel: 'Motivo de la cancelación',\n reasonPlaceholder: 'Seleccionar',\n descriptionLabel: 'Describa qué lo llevó a tomar esta decisión',\n descriptionPlaceholder: 'Explique su decisión...',\n charactersCount: '{count}/400 caracteres',\n passwordLabel: 'Contraseña',\n passwordPlaceholder: 'Ingrese su contraseña',\n submit: 'Eliminar cuenta',\n requiredFields: 'Complete todos los campos obligatorios',\n reasons: {\n noFeature: 'La herramienta no tiene una función que necesito',\n technical: 'Encontré problemas técnicos o errores en el sistema',\n support: 'Tuve problemas con el soporte o atención al cliente',\n updates: 'Las actualizaciones tardan más de lo esperado',\n temporary: 'La cancelación es temporal',\n other: 'Otro motivo',\n },\n },\n confirmDelete: {\n title: '¡Qué pena verte partir!',\n warning:\n 'Todas sus <b>{count} páginas</b> serán eliminadas permanentemente. ¡Esta acción es <b>irreversible!</b>',\n sessionExpired: 'Sesión expirada. Complete los campos nuevamente.',\n success: 'Cuenta eliminada exitosamente',\n error: 'Error al eliminar la cuenta. Intente nuevamente.',\n keepAccount: 'Mantener mi cuenta',\n deleteAnyway: 'Eliminar de todas formas',\n deleting: 'Eliminando...',\n },\n cantDelete: {\n title: 'No es posible eliminar la cuenta',\n description:\n 'Tiene una suscripción activa. Para eliminar su cuenta, <b>primero cancele su suscripción</b> en la página Suscripción e intente nuevamente.',\n confirm: 'Ok, entendido',\n goToSubscription: 'Ir a suscripción',\n },\n twoFactor: {\n title: 'Autenticación de dos factores',\n instructions:\n 'Instale una aplicación autenticadora en su dispositivo móvil (p. ej., <link>Google Authenticator</link>), escanee el código QR al lado o copie la clave en la aplicación y, a continuación, ingrese el código de 6 dígitos generado para continuar.',\n qrAlt: 'Código QR para autenticación de dos factores',\n retry: 'Intentar de nuevo',\n pasteDigits: 'Pegue los 6 dígitos abajo',\n activating: 'Activando...',\n activate: 'Activar autenticación',\n recoveryTitle: 'Códigos de seguridad',\n recoveryHeading: 'Guarde estos códigos de recuperación de emergencia',\n recoveryText1:\n 'Si pierde acceso a su teléfono, no podrá iniciar sesión en su cuenta sin un código de dos factores.',\n recoveryText2: 'Imprima, copie o escriba los códigos a continuación en un lugar seguro.',\n copyCodes: 'Copiar códigos',\n finish: 'Finalizar',\n codesCopied: 'Códigos copiados correctamente',\n generateError: 'Error al generar el código QR. Intente de nuevo.',\n confirmError: 'Error al confirmar el código. Intente de nuevo.',\n disableTitle: 'Desactivar autenticación 2FA',\n disableDescription:\n 'Ingrese el código de 6 dígitos de su aplicación autenticadora para confirmar la desactivación.',\n authenticatorCode: 'Código del autenticador',\n disabling: 'Desactivando...',\n disable: 'Desactivar 2FA',\n disabledSuccess: 'Autenticación de dos factores desactivada',\n disableError: 'Error al desactivar 2FA. Intente de nuevo.',\n invalidCode: 'Código inválido',\n codeResent: 'Código reenviado',\n resendError: 'Error al reenviar el código. Intente de nuevo.',\n },\n profile: {\n title: 'Mi perfil',\n avatarAlt: 'Foto del usuario',\n changePhoto: 'Cambiar foto',\n name: 'Nombre',\n namePlaceholder: 'Ingrese su nombre',\n lastName: 'Apellido',\n lastNamePlaceholder: 'Ingrese su apellido',\n gender: 'Género',\n genderPlaceholder: 'Seleccione su género',\n phone: 'Teléfono',\n change: 'Cambiar',\n accessData: 'Datos de acceso',\n email: 'Correo electrónico',\n savedSuccess: 'Perfil actualizado exitosamente',\n saveError: 'Error al actualizar el perfil',\n },\n otp: {\n validationCode: 'Código de validación',\n incorrectCode: 'Código incorrecto',\n resend: 'Reenviar código',\n resendIn: 'Reenviar en <b>{time}</b>',\n validating: 'Validando...',\n },\n changeEmail: {\n title: 'Cambiar correo electrónico',\n confirm: 'Cambiar correo electrónico',\n sentCodeTo: 'Enviamos un código de validación al correo electrónico <b>{email}.</b>',\n updateTitle: 'Actualizar correo electrónico de contacto',\n updateDescription:\n 'Indique su nuevo correo electrónico para mantener su información de contacto actualizada.',\n newEmail: 'Nuevo correo electrónico',\n newEmailPlaceholder: 'Ingrese su nuevo correo electrónico',\n emailChanged: 'Correo electrónico cambiado exitosamente',\n emailExistsError: 'El correo electrónico ya existe o ocurrió un error. Intente más tarde.',\n },\n changePhone: {\n titleEdit: 'Cambiar teléfono',\n titleAdd: 'Agregar teléfono',\n sentCodeTo: 'Enviamos un código de validación al número actual <b>{phone}.</b>',\n confirm: 'Cambiar teléfono',\n updateTitle: 'Actualizar teléfono de contacto',\n addTitle: 'Agregar teléfono de contacto',\n updateDescription: 'Indique el nuevo número para mantener su información de contacto actualizada.',\n addDescription: 'Indique su número de teléfono para contacto.',\n newNumber: 'Nuevo número',\n numberLabel: 'Número de teléfono',\n phoneChanged: 'Teléfono cambiado',\n phoneAdded: 'Teléfono agregado',\n invalidNumber: 'Número de teléfono inválido',\n saveError: 'Ocurrió un error al guardar el número de teléfono. Intente más tarde.',\n numberExistsError: 'El número ya existe o ocurrió un error. Intente más tarde.',\n },\n security: {\n title: 'Seguridad',\n googleLinkedTitle: 'Cuenta Google vinculada',\n googleLinkedDescription:\n 'Su cuenta está vinculada a Google. Si la desvincula, utilice \"Olvidé mi contraseña\" para restablecer una contraseña de acceso por correo electrónico.',\n unlinking: 'Desvinculando...',\n unlinkGoogle: 'Desvincular Google',\n unlinkError: 'Error al desvincular la cuenta Google.',\n deleteAccountDescription:\n 'Esta acción es permanente y no se puede deshacer. Todos sus datos, proyectos y configuraciones serán eliminados permanentemente.',\n deleteMyAccount: 'Eliminar mi cuenta',\n },\n token: {\n title: 'Token de la cuenta',\n label: 'Token',\n copySuccess: 'Token copiado correctamente',\n copyError: 'No se pudo copiar el token',\n info: 'Este token es exclusivo de su cuenta y permite el acceso a la API. No lo comparta con terceros.',\n docsLink: 'Acceder a la documentación',\n },\n changePassword: {\n title: 'Cambiar contraseña',\n currentPassword: 'Contraseña actual',\n currentPasswordPlaceholder: 'Ingrese su contraseña actual',\n newPassword: 'Nueva contraseña',\n newPasswordPlaceholder: 'Ingrese su nueva contraseña',\n submit: 'Guardar nueva contraseña',\n changeError: 'Error al cambiar la contraseña',\n changedSuccess: 'Contraseña cambiada correctamente',\n genericError: 'Error al cambiar la contraseña. Intente nuevamente.',\n },\n globalPreferences: {\n title: 'Cambiar preferencias globales',\n srDescription: 'Confirmación de cambio de preferencias globales de la cuenta',\n warning:\n 'Está cambiando configuraciones que impactan <b>todos los usuarios de la cuenta</b>. ¿Desea confirmar?',\n },\n configurations: {\n title: 'Configuración',\n },\n },\n\n languages: {\n 'pt-br': 'Portugués (Brasil)',\n 'en-us': 'Inglés (EE. UU.)',\n 'es-es': 'Español',\n },\n} as const;\n\nexport default messages;\n"],"mappings":"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","names":[]}
@@ -0,0 +1,16 @@
1
+ import { DEFAULT_LOCALE } from "../config";
2
+ import enUs from "./en-us";
3
+ import esEs from "./es-es";
4
+ import ptBr from "./pt-br";
5
+ const COMMON_MESSAGES = {
6
+ "pt-br": ptBr,
7
+ "en-us": enUs,
8
+ "es-es": esEs
9
+ };
10
+ function getCommonMessages(locale) {
11
+ return COMMON_MESSAGES[locale] ?? COMMON_MESSAGES[DEFAULT_LOCALE];
12
+ }
13
+ export {
14
+ getCommonMessages
15
+ };
16
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/i18n/messages/index.ts"],"sourcesContent":["import { DEFAULT_LOCALE, Locale } from '../config';\nimport enUs from './en-us';\nimport esEs from './es-es';\nimport ptBr from './pt-br';\n\nconst COMMON_MESSAGES: Record<Locale, Record<string, unknown>> = {\n 'pt-br': ptBr,\n 'en-us': enUs,\n 'es-es': esEs,\n};\n\n/**\n * Forma das mensagens globais (derivada do pt-br, a fonte da verdade).\n * Os apps usam este tipo para a type augmentation do next-intl (chaves `common.*` tipadas).\n */\nexport type CommonMessages = typeof ptBr;\n\n/**\n * Mensagens dos componentes da @greatapps/common para o locale informado.\n * Os apps mesclam o resultado sob o namespace `common` ao montar o catálogo do next-intl.\n */\nexport function getCommonMessages(locale: Locale): Record<string, unknown> {\n return COMMON_MESSAGES[locale] ?? COMMON_MESSAGES[DEFAULT_LOCALE];\n}\n"],"mappings":"AAAA,SAAS,sBAA8B;AACvC,OAAO,UAAU;AACjB,OAAO,UAAU;AACjB,OAAO,UAAU;AAEjB,MAAM,kBAA2D;AAAA,EAC/D,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AACX;AAYO,SAAS,kBAAkB,QAAyC;AACzE,SAAO,gBAAgB,MAAM,KAAK,gBAAgB,cAAc;AAClE;","names":[]}
@@ -0,0 +1,216 @@
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
+ savedSuccess: "Prefer\xEAncias salvas com sucesso",
46
+ saveError: "Erro ao salvar prefer\xEAncias"
47
+ },
48
+ // Conta — modais e seções. `<b>` = trecho em negrito (rich text); `{count}` = interpolação.
49
+ account: {
50
+ deleteAccount: {
51
+ title: "Excluir conta",
52
+ description: "Esta a\xE7\xE3o \xE9 <b>irrevers\xEDvel</b>. Ao confirmar, sua conta e todos os seus dados ser\xE3o exclu\xEDdos.",
53
+ reasonLabel: "Motivo do cancelamento",
54
+ reasonPlaceholder: "Selecione",
55
+ descriptionLabel: "Descreva o que levou a tomar essa decis\xE3o",
56
+ descriptionPlaceholder: "Explique sua decis\xE3o...",
57
+ charactersCount: "{count}/400 caracteres",
58
+ passwordLabel: "Senha",
59
+ passwordPlaceholder: "Informe sua senha",
60
+ submit: "Excluir conta",
61
+ requiredFields: "Preencha todos os campos obrigat\xF3rios",
62
+ reasons: {
63
+ noFeature: "A ferramenta n\xE3o possui uma fun\xE7\xE3o que eu preciso",
64
+ technical: "Encontrei problemas t\xE9cnicos ou erros no sistema",
65
+ support: "Tive problemas com o suporte ou atendimento",
66
+ updates: "As atualiza\xE7\xF5es demoram mais do que o esperado",
67
+ temporary: "O cancelamento \xE9 tempor\xE1rio",
68
+ other: "Outro motivo"
69
+ }
70
+ },
71
+ confirmDelete: {
72
+ title: "Uma pena te ver ir!",
73
+ warning: "Todas suas <b>{count} p\xE1ginas</b> ser\xE3o deletadas permanentemente. Essa a\xE7\xE3o \xE9 <b>irrevers\xEDvel!</b>",
74
+ sessionExpired: "Sess\xE3o expirada. Preencha os campos novamente.",
75
+ success: "Conta exclu\xEDda com sucesso",
76
+ error: "Erro ao excluir. Tente novamente.",
77
+ keepAccount: "Manter minha conta",
78
+ deleteAnyway: "Excluir mesmo assim",
79
+ deleting: "Excluindo..."
80
+ },
81
+ cantDelete: {
82
+ title: "N\xE3o \xE9 poss\xEDvel excluir a conta",
83
+ 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.",
84
+ confirm: "Ok, entendi",
85
+ goToSubscription: "Ir para assinatura"
86
+ },
87
+ twoFactor: {
88
+ title: "Autentica\xE7\xE3o de dois fatores",
89
+ 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.",
90
+ qrAlt: "QR Code para autentica\xE7\xE3o de dois fatores",
91
+ retry: "Tentar novamente",
92
+ pasteDigits: "Cole os 6 d\xEDgitos abaixo",
93
+ activating: "Ativando...",
94
+ activate: "Ativar autentica\xE7\xE3o",
95
+ recoveryTitle: "C\xF3digos de seguran\xE7a",
96
+ recoveryHeading: "Salve estes c\xF3digos de recupera\xE7\xE3o de emerg\xEAncia",
97
+ 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.",
98
+ recoveryText2: "Imprima, copie ou escreva em um local seguro os c\xF3digos abaixo.",
99
+ copyCodes: "Copiar c\xF3digos",
100
+ finish: "Finalizar",
101
+ codesCopied: "C\xF3digos copiados com sucesso",
102
+ generateError: "Erro ao gerar QR Code. Tente novamente.",
103
+ confirmError: "Erro ao confirmar c\xF3digo. Tente novamente.",
104
+ disableTitle: "Desabilitar autentica\xE7\xE3o 2FA",
105
+ disableDescription: "Informe o c\xF3digo de 6 d\xEDgitos do seu aplicativo autenticador para confirmar a desativa\xE7\xE3o.",
106
+ authenticatorCode: "C\xF3digo do autenticador",
107
+ disabling: "Desabilitando...",
108
+ disable: "Desabilitar 2FA",
109
+ disabledSuccess: "Autentica\xE7\xE3o de dois fatores desabilitada",
110
+ disableError: "Erro ao desabilitar 2FA. Tente novamente.",
111
+ invalidCode: "C\xF3digo inv\xE1lido",
112
+ codeResent: "C\xF3digo reenviado",
113
+ resendError: "Erro ao reenviar c\xF3digo. Tente novamente."
114
+ },
115
+ profile: {
116
+ title: "Meu perfil",
117
+ avatarAlt: "Foto do usu\xE1rio",
118
+ changePhoto: "Alterar foto",
119
+ name: "Nome",
120
+ namePlaceholder: "Digite seu nome",
121
+ lastName: "Sobrenome",
122
+ lastNamePlaceholder: "Digite seu sobrenome",
123
+ gender: "G\xEAnero",
124
+ genderPlaceholder: "Selecione seu g\xEAnero",
125
+ phone: "Telefone",
126
+ change: "Alterar",
127
+ accessData: "Dados de acesso",
128
+ email: "E-mail",
129
+ savedSuccess: "Perfil atualizado com sucesso",
130
+ saveError: "Erro ao atualizar perfil"
131
+ },
132
+ otp: {
133
+ validationCode: "C\xF3digo de valida\xE7\xE3o",
134
+ incorrectCode: "C\xF3digo incorreto",
135
+ resend: "Reenviar c\xF3digo",
136
+ resendIn: "Reenviar em <b>{time}</b>",
137
+ validating: "Validando..."
138
+ },
139
+ changeEmail: {
140
+ title: "Alterar e-mail",
141
+ confirm: "Alterar e-mail",
142
+ sentCodeTo: "Enviamos um c\xF3digo de valida\xE7\xE3o para o E-mail <b>{email}.</b>",
143
+ updateTitle: "Atualizar E-mail de contato",
144
+ updateDescription: "Informe o seu novo E-mail para manter seu contato atualizado.",
145
+ newEmail: "Novo e-mail",
146
+ newEmailPlaceholder: "Digite seu novo e-mail",
147
+ emailChanged: "E-mail alterado com sucesso",
148
+ emailExistsError: "E-mail j\xE1 existente ou ocorreu um erro. Tente novamente mais tarde."
149
+ },
150
+ changePhone: {
151
+ titleEdit: "Alterar telefone",
152
+ titleAdd: "Adicionar telefone",
153
+ sentCodeTo: "Enviamos um c\xF3digo de valida\xE7\xE3o para o n\xFAmero atual <b>{phone}.</b>",
154
+ confirm: "Alterar telefone",
155
+ updateTitle: "Atualizar telefone de contato",
156
+ addTitle: "Adicionar telefone de contato",
157
+ updateDescription: "Informe o novo n\xFAmero para manter seu contato atualizado.",
158
+ addDescription: "Informe seu n\xFAmero de telefone para contato.",
159
+ newNumber: "Novo n\xFAmero",
160
+ numberLabel: "N\xFAmero de telefone",
161
+ phoneChanged: "Telefone alterado",
162
+ phoneAdded: "Telefone adicionado",
163
+ invalidNumber: "N\xFAmero de telefone inv\xE1lido",
164
+ saveError: "Ocorreu um erro ao salvar o telefone. Tente novamente mais tarde.",
165
+ numberExistsError: "N\xFAmero j\xE1 existente ou ocorreu um erro. Tente novamente mais tarde."
166
+ },
167
+ security: {
168
+ title: "Seguran\xE7a",
169
+ googleLinkedTitle: "Conta Google vinculada",
170
+ googleLinkedDescription: 'Sua conta est\xE1 vinculada ao Google. Se desvincular, use "Esqueci minha senha" para redefinir uma senha de acesso por e-mail.',
171
+ unlinking: "Desvinculando...",
172
+ unlinkGoogle: "Desvincular Google",
173
+ unlinkError: "Erro ao desvincular conta Google.",
174
+ 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.",
175
+ deleteMyAccount: "Excluir minha conta"
176
+ },
177
+ token: {
178
+ title: "Token da conta",
179
+ label: "Token",
180
+ copySuccess: "Token copiado com sucesso",
181
+ copyError: "N\xE3o foi poss\xEDvel copiar o token",
182
+ info: "Este token \xE9 exclusivo da sua conta e permite acesso \xE0 API. N\xE3o compartilhe com terceiros.",
183
+ docsLink: "Acessar a documenta\xE7\xE3o"
184
+ },
185
+ changePassword: {
186
+ title: "Alterar senha",
187
+ currentPassword: "Senha atual",
188
+ currentPasswordPlaceholder: "Digite sua senha atual",
189
+ newPassword: "Nova senha",
190
+ newPasswordPlaceholder: "Digite sua nova senha",
191
+ submit: "Salvar nova senha",
192
+ changeError: "Erro ao alterar senha",
193
+ changedSuccess: "Senha alterada com sucesso",
194
+ genericError: "Erro ao alterar senha. Tente novamente."
195
+ },
196
+ globalPreferences: {
197
+ title: "Alterar prefer\xEAncias globais",
198
+ srDescription: "Confirma\xE7\xE3o de altera\xE7\xE3o de prefer\xEAncias globais da conta",
199
+ warning: "Voc\xEA est\xE1 alterando configura\xE7\xF5es que impactam <b>todos os usu\xE1rios da conta</b>. Deseja confirmar?"
200
+ },
201
+ configurations: {
202
+ title: "Configura\xE7\xF5es"
203
+ }
204
+ },
205
+ // Nomes dos idiomas exibidos no seletor.
206
+ languages: {
207
+ "pt-br": "Portugu\xEAs (Brasil)",
208
+ "en-us": "Ingl\xEAs (EUA)",
209
+ "es-es": "Espanhol"
210
+ }
211
+ };
212
+ var pt_br_default = messages;
213
+ export {
214
+ pt_br_default as default
215
+ };
216
+ //# sourceMappingURL=pt-br.mjs.map
@@ -0,0 +1 @@
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 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 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 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 // Nomes dos idiomas exibidos no seletor.\n languages: {\n 'pt-br': 'Português (Brasil)',\n 'en-us': 'Inglês (EUA)',\n 'es-es': 'Espanhol',\n },\n} as const;\n\nexport default messages;\n"],"mappings":"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","names":[]}
@@ -0,0 +1,12 @@
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
@@ -0,0 +1 @@
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":[]}
@@ -0,0 +1,42 @@
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
@@ -0,0 +1 @@
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 ADDED
@@ -0,0 +1,14 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/i18n.ts"],"sourcesContent":["/**\n * Barril client-safe de i18n (`@greatapps/common/i18n`).\n * NÃO exporta `resolveLocale` (server-only) — esse vem de `@greatapps/common/server`.\n */\nexport { LOCALES, DEFAULT_LOCALE, LOCALE_COOKIE, isLocale } from './i18n/config';\nexport type { Locale } from './i18n/config';\nexport { normalizeLocale } from './i18n/normalize';\nexport { localeFromCountry } from './i18n/country-language';\nexport { getCommonMessages } from './i18n/messages';\nexport type { CommonMessages } from './i18n/messages';\n"],"mappings":"AAIA,SAAS,SAAS,gBAAgB,eAAe,gBAAgB;AAEjE,SAAS,uBAAuB;AAChC,SAAS,yBAAyB;AAClC,SAAS,yBAAyB;","names":[]}