@croacroa/react-native-template 2.0.1 → 3.2.0

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 (172) hide show
  1. package/.env.example +5 -0
  2. package/.eslintrc.js +8 -0
  3. package/.github/workflows/ci.yml +187 -187
  4. package/.github/workflows/eas-build.yml +55 -55
  5. package/.github/workflows/eas-update.yml +50 -50
  6. package/.github/workflows/npm-publish.yml +57 -0
  7. package/CHANGELOG.md +195 -106
  8. package/CONTRIBUTING.md +377 -377
  9. package/LICENSE +21 -0
  10. package/README.md +446 -399
  11. package/__tests__/accessibility/components.test.tsx +285 -0
  12. package/__tests__/components/Button.test.tsx +2 -4
  13. package/__tests__/components/__snapshots__/snapshots.test.tsx.snap +512 -0
  14. package/__tests__/components/snapshots.test.tsx +131 -131
  15. package/__tests__/helpers/a11y.ts +54 -0
  16. package/__tests__/hooks/useAnalytics.test.ts +100 -0
  17. package/__tests__/hooks/useAnimations.test.ts +70 -0
  18. package/__tests__/hooks/useAuth.test.tsx +71 -28
  19. package/__tests__/hooks/useMedia.test.ts +318 -0
  20. package/__tests__/hooks/usePayments.test.tsx +307 -0
  21. package/__tests__/hooks/usePermission.test.ts +230 -0
  22. package/__tests__/hooks/useWebSocket.test.ts +329 -0
  23. package/__tests__/integration/auth-api.test.tsx +224 -227
  24. package/__tests__/performance/VirtualizedList.perf.test.tsx +385 -362
  25. package/__tests__/services/api.test.ts +24 -6
  26. package/app/(auth)/home.tsx +11 -9
  27. package/app/(auth)/profile.tsx +8 -6
  28. package/app/(auth)/settings.tsx +11 -9
  29. package/app/(public)/forgot-password.tsx +25 -15
  30. package/app/(public)/login.tsx +48 -12
  31. package/app/(public)/onboarding.tsx +5 -5
  32. package/app/(public)/register.tsx +24 -15
  33. package/app/_layout.tsx +6 -3
  34. package/app.config.ts +27 -2
  35. package/assets/images/.gitkeep +7 -7
  36. package/assets/images/adaptive-icon.png +0 -0
  37. package/assets/images/favicon.png +0 -0
  38. package/assets/images/icon.png +0 -0
  39. package/assets/images/notification-icon.png +0 -0
  40. package/assets/images/splash.png +0 -0
  41. package/components/ErrorBoundary.tsx +73 -28
  42. package/components/auth/SocialLoginButtons.tsx +168 -0
  43. package/components/forms/FormInput.tsx +5 -3
  44. package/components/onboarding/OnboardingScreen.tsx +370 -370
  45. package/components/onboarding/index.ts +2 -2
  46. package/components/providers/AnalyticsProvider.tsx +67 -0
  47. package/components/providers/SuspenseBoundary.tsx +359 -357
  48. package/components/providers/index.ts +24 -21
  49. package/components/ui/AnimatedButton.tsx +1 -9
  50. package/components/ui/AnimatedList.tsx +98 -0
  51. package/components/ui/AnimatedScreen.tsx +89 -0
  52. package/components/ui/Avatar.tsx +319 -316
  53. package/components/ui/Badge.tsx +416 -416
  54. package/components/ui/BottomSheet.tsx +307 -307
  55. package/components/ui/Button.tsx +11 -3
  56. package/components/ui/Checkbox.tsx +261 -261
  57. package/components/ui/FeatureGate.tsx +57 -0
  58. package/components/ui/ForceUpdateScreen.tsx +108 -0
  59. package/components/ui/ImagePickerButton.tsx +180 -0
  60. package/components/ui/Input.stories.tsx +2 -10
  61. package/components/ui/Input.tsx +2 -10
  62. package/components/ui/OptimizedImage.tsx +369 -369
  63. package/components/ui/Paywall.tsx +253 -0
  64. package/components/ui/PermissionGate.tsx +155 -0
  65. package/components/ui/PurchaseButton.tsx +84 -0
  66. package/components/ui/Select.tsx +240 -240
  67. package/components/ui/Skeleton.tsx +3 -1
  68. package/components/ui/Toast.tsx +427 -0
  69. package/components/ui/UploadProgress.tsx +189 -0
  70. package/components/ui/VirtualizedList.tsx +288 -285
  71. package/components/ui/index.ts +28 -23
  72. package/constants/config.ts +135 -97
  73. package/docs/adr/001-state-management.md +79 -79
  74. package/docs/adr/002-styling-approach.md +130 -130
  75. package/docs/adr/003-data-fetching.md +155 -155
  76. package/docs/adr/004-auth-adapter-pattern.md +144 -144
  77. package/docs/adr/README.md +78 -78
  78. package/docs/guides/analytics-posthog.md +121 -0
  79. package/docs/guides/auth-supabase.md +162 -0
  80. package/docs/guides/feature-flags-launchdarkly.md +150 -0
  81. package/docs/guides/payments-revenuecat.md +169 -0
  82. package/docs/plans/2026-02-22-phase6-implementation.md +3222 -0
  83. package/docs/plans/2026-02-22-phase6-template-completion-design.md +196 -0
  84. package/docs/plans/2026-02-23-npm-publish-design.md +31 -0
  85. package/docs/plans/2026-02-23-phase7-polish-documentation-design.md +79 -0
  86. package/docs/plans/2026-02-23-phase8-additional-features-design.md +136 -0
  87. package/eas.json +2 -1
  88. package/hooks/index.ts +70 -27
  89. package/hooks/useAnimatedEntry.ts +204 -0
  90. package/hooks/useApi.ts +64 -4
  91. package/hooks/useAuth.tsx +7 -3
  92. package/hooks/useBiometrics.ts +295 -295
  93. package/hooks/useChannel.ts +111 -0
  94. package/hooks/useDeepLinking.ts +256 -256
  95. package/hooks/useExperiment.ts +36 -0
  96. package/hooks/useFeatureFlag.ts +59 -0
  97. package/hooks/useForceUpdate.ts +91 -0
  98. package/hooks/useImagePicker.ts +281 -0
  99. package/hooks/useInAppReview.ts +64 -0
  100. package/hooks/useMFA.ts +509 -499
  101. package/hooks/useParallax.ts +142 -0
  102. package/hooks/usePerformance.ts +434 -434
  103. package/hooks/usePermission.ts +190 -0
  104. package/hooks/usePresence.ts +129 -0
  105. package/hooks/useProducts.ts +36 -0
  106. package/hooks/usePurchase.ts +103 -0
  107. package/hooks/useRateLimit.ts +70 -0
  108. package/hooks/useSubscription.ts +49 -0
  109. package/hooks/useTrackEvent.ts +52 -0
  110. package/hooks/useTrackScreen.ts +40 -0
  111. package/hooks/useUpdates.ts +358 -358
  112. package/hooks/useUpload.ts +165 -0
  113. package/hooks/useWebSocket.ts +111 -0
  114. package/i18n/index.ts +197 -194
  115. package/i18n/locales/ar.json +170 -101
  116. package/i18n/locales/de.json +170 -101
  117. package/i18n/locales/en.json +170 -101
  118. package/i18n/locales/es.json +170 -101
  119. package/i18n/locales/fr.json +170 -101
  120. package/jest.config.js +1 -1
  121. package/maestro/README.md +113 -113
  122. package/maestro/config.yaml +35 -35
  123. package/maestro/flows/login.yaml +62 -62
  124. package/maestro/flows/mfa-login.yaml +92 -92
  125. package/maestro/flows/mfa-setup.yaml +86 -86
  126. package/maestro/flows/navigation.yaml +68 -68
  127. package/maestro/flows/offline-conflict.yaml +101 -101
  128. package/maestro/flows/offline-sync.yaml +128 -128
  129. package/maestro/flows/offline.yaml +60 -60
  130. package/maestro/flows/register.yaml +94 -94
  131. package/package.json +188 -175
  132. package/scripts/generate-placeholders.js +38 -0
  133. package/services/analytics/adapters/console.ts +50 -0
  134. package/services/analytics/analytics-adapter.ts +94 -0
  135. package/services/analytics/types.ts +73 -0
  136. package/services/analytics.ts +428 -428
  137. package/services/api.ts +419 -340
  138. package/services/auth/social/apple.ts +110 -0
  139. package/services/auth/social/google.ts +159 -0
  140. package/services/auth/social/social-auth.ts +100 -0
  141. package/services/auth/social/types.ts +80 -0
  142. package/services/authAdapter.ts +333 -333
  143. package/services/backgroundSync.ts +652 -626
  144. package/services/feature-flags/adapters/mock.ts +108 -0
  145. package/services/feature-flags/feature-flag-adapter.ts +174 -0
  146. package/services/feature-flags/types.ts +79 -0
  147. package/services/force-update.ts +140 -0
  148. package/services/index.ts +116 -54
  149. package/services/media/compression.ts +91 -0
  150. package/services/media/media-picker.ts +151 -0
  151. package/services/media/media-upload.ts +160 -0
  152. package/services/payments/adapters/mock.ts +159 -0
  153. package/services/payments/payment-adapter.ts +118 -0
  154. package/services/payments/types.ts +131 -0
  155. package/services/permissions/permission-manager.ts +284 -0
  156. package/services/permissions/types.ts +104 -0
  157. package/services/realtime/types.ts +100 -0
  158. package/services/realtime/websocket-manager.ts +441 -0
  159. package/services/security.ts +289 -286
  160. package/services/sentry.ts +4 -4
  161. package/stores/appStore.ts +9 -0
  162. package/stores/notificationStore.ts +3 -1
  163. package/tailwind.config.js +47 -47
  164. package/tsconfig.json +37 -13
  165. package/types/user.ts +1 -1
  166. package/utils/accessibility.ts +446 -446
  167. package/utils/animations/presets.ts +182 -0
  168. package/utils/animations/transitions.ts +62 -0
  169. package/utils/index.ts +63 -52
  170. package/utils/toast.ts +9 -2
  171. package/utils/validation.ts +4 -1
  172. package/utils/withAccessibility.tsx +272 -272
@@ -1,101 +1,170 @@
1
- {
2
- "common": {
3
- "loading": "Loading...",
4
- "error": "Error",
5
- "success": "Success",
6
- "cancel": "Cancel",
7
- "confirm": "Confirm",
8
- "save": "Save",
9
- "delete": "Delete",
10
- "edit": "Edit",
11
- "close": "Close",
12
- "back": "Back",
13
- "next": "Next",
14
- "done": "Done",
15
- "retry": "Retry",
16
- "search": "Search",
17
- "noResults": "No results found",
18
- "offline": "You are offline",
19
- "online": "Back online"
20
- },
21
- "auth": {
22
- "signIn": "Sign In",
23
- "signUp": "Sign Up",
24
- "signOut": "Sign Out",
25
- "email": "Email",
26
- "password": "Password",
27
- "confirmPassword": "Confirm Password",
28
- "name": "Name",
29
- "forgotPassword": "Forgot Password?",
30
- "resetPassword": "Reset Password",
31
- "noAccount": "Don't have an account?",
32
- "haveAccount": "Already have an account?",
33
- "welcomeBack": "Welcome back!",
34
- "signInToContinue": "Sign in to continue",
35
- "createAccount": "Create Account",
36
- "joinUs": "Join us today",
37
- "enterEmail": "Enter your email",
38
- "enterPassword": "Enter your password",
39
- "enterName": "Enter your name",
40
- "passwordHint": "At least 8 characters",
41
- "invalidCredentials": "Invalid email or password",
42
- "accountCreated": "Account created successfully!",
43
- "sessionExpired": "Session expired. Please sign in again.",
44
- "biometric": {
45
- "title": "Biometric Authentication",
46
- "prompt": "Authenticate to continue",
47
- "fallback": "Use passcode",
48
- "enabled": "Biometric login enabled",
49
- "disabled": "Biometric login disabled",
50
- "notAvailable": "Biometric authentication not available"
51
- }
52
- },
53
- "navigation": {
54
- "home": "Home",
55
- "profile": "Profile",
56
- "settings": "Settings",
57
- "notifications": "Notifications"
58
- },
59
- "profile": {
60
- "title": "Profile",
61
- "editProfile": "Edit Profile",
62
- "changePhoto": "Change Photo",
63
- "personalInfo": "Personal Information",
64
- "memberSince": "Member since {{date}}"
65
- },
66
- "settings": {
67
- "title": "Settings",
68
- "appearance": "Appearance",
69
- "theme": "Theme",
70
- "themeLight": "Light",
71
- "themeDark": "Dark",
72
- "themeSystem": "System",
73
- "language": "Language",
74
- "notifications": "Notifications",
75
- "pushNotifications": "Push Notifications",
76
- "emailNotifications": "Email Notifications",
77
- "security": "Security",
78
- "biometricAuth": "Biometric Authentication",
79
- "changePassword": "Change Password",
80
- "privacy": "Privacy Policy",
81
- "terms": "Terms of Service",
82
- "about": "About",
83
- "version": "Version",
84
- "deleteAccount": "Delete Account"
85
- },
86
- "errors": {
87
- "generic": "Something went wrong",
88
- "network": "Network error. Please check your connection.",
89
- "timeout": "Request timed out. Please try again.",
90
- "unauthorized": "You are not authorized to perform this action.",
91
- "notFound": "Resource not found.",
92
- "validation": "Please check your input and try again."
93
- },
94
- "validation": {
95
- "required": "This field is required",
96
- "email": "Please enter a valid email",
97
- "passwordMin": "Password must be at least 8 characters",
98
- "passwordMatch": "Passwords do not match",
99
- "nameMin": "Name must be at least 2 characters"
100
- }
101
- }
1
+ {
2
+ "common": {
3
+ "loading": "Loading...",
4
+ "error": "Error",
5
+ "success": "Success",
6
+ "cancel": "Cancel",
7
+ "confirm": "Confirm",
8
+ "save": "Save",
9
+ "delete": "Delete",
10
+ "edit": "Edit",
11
+ "close": "Close",
12
+ "back": "Back",
13
+ "next": "Next",
14
+ "done": "Done",
15
+ "retry": "Retry",
16
+ "search": "Search",
17
+ "noResults": "No results found",
18
+ "offline": "You are offline",
19
+ "online": "Back online"
20
+ },
21
+ "auth": {
22
+ "signIn": "Sign In",
23
+ "signUp": "Sign Up",
24
+ "signOut": "Sign Out",
25
+ "email": "Email",
26
+ "password": "Password",
27
+ "confirmPassword": "Confirm Password",
28
+ "name": "Name",
29
+ "forgotPassword": "Forgot Password?",
30
+ "resetPassword": "Reset Password",
31
+ "noAccount": "Don't have an account?",
32
+ "haveAccount": "Already have an account?",
33
+ "welcomeBack": "Welcome back!",
34
+ "signInToContinue": "Sign in to continue",
35
+ "createAccount": "Create Account",
36
+ "joinUs": "Join us today",
37
+ "enterEmail": "Enter your email",
38
+ "enterPassword": "Enter your password",
39
+ "enterName": "Enter your name",
40
+ "passwordHint": "At least 8 characters",
41
+ "invalidCredentials": "Invalid email or password",
42
+ "accountCreated": "Account created successfully!",
43
+ "sessionExpired": "Session expired. Please sign in again.",
44
+ "createPasswordPlaceholder": "Create a password",
45
+ "confirmPasswordPlaceholder": "Confirm your password",
46
+ "passwordHintFull": "Min 8 chars, 1 uppercase, 1 lowercase, 1 number",
47
+ "biometric": {
48
+ "title": "Biometric Authentication",
49
+ "prompt": "Authenticate to continue",
50
+ "fallback": "Use passcode",
51
+ "enabled": "Biometric login enabled",
52
+ "disabled": "Biometric login disabled",
53
+ "notAvailable": "Biometric authentication not available"
54
+ }
55
+ },
56
+ "forgotPassword": {
57
+ "title": "Forgot Password",
58
+ "subtitle": "Enter your email and we'll send you a reset link",
59
+ "sendResetLink": "Send Reset Link",
60
+ "checkEmail": "Check Your Email",
61
+ "resetSent": "We've sent a password reset link to {{email}}",
62
+ "backToSignIn": "Back to Sign In",
63
+ "rememberPassword": "Remember your password?",
64
+ "emailRequired": "Please enter your email address",
65
+ "sendFailed": "Failed to send reset link. Please try again."
66
+ },
67
+ "home": {
68
+ "welcomeBack": "Welcome back, {{name}}!",
69
+ "quickActions": "Quick Actions",
70
+ "newItem": "New Item",
71
+ "stats": "Stats",
72
+ "recentActivity": "Recent Activity",
73
+ "noRecentActivity": "No recent activity",
74
+ "activityWillAppear": "Your activity will appear here"
75
+ },
76
+ "navigation": {
77
+ "home": "Home",
78
+ "profile": "Profile",
79
+ "settings": "Settings",
80
+ "notifications": "Notifications"
81
+ },
82
+ "profile": {
83
+ "title": "Profile",
84
+ "editProfile": "Edit Profile",
85
+ "changePhoto": "Change Photo",
86
+ "personalInfo": "Personal Information",
87
+ "memberSince": "Member since {{date}}",
88
+ "privacySecurity": "Privacy & Security",
89
+ "helpSupport": "Help & Support"
90
+ },
91
+ "settings": {
92
+ "title": "Settings",
93
+ "appearance": "Appearance",
94
+ "theme": "Theme",
95
+ "themeLight": "Light",
96
+ "themeDark": "Dark",
97
+ "themeSystem": "System",
98
+ "language": "Language",
99
+ "notifications": "Notifications",
100
+ "pushNotifications": "Push Notifications",
101
+ "emailNotifications": "Email Notifications",
102
+ "security": "Security",
103
+ "biometricAuth": "Biometric Authentication",
104
+ "changePassword": "Change Password",
105
+ "privacy": "Privacy Policy",
106
+ "terms": "Terms of Service",
107
+ "about": "About",
108
+ "version": "Version",
109
+ "deleteAccount": "Delete Account",
110
+ "darkMode": "Dark Mode",
111
+ "appVersion": "App Version"
112
+ },
113
+ "errors": {
114
+ "generic": "Something went wrong",
115
+ "network": "Network error. Please check your connection.",
116
+ "timeout": "Request timed out. Please try again.",
117
+ "unauthorized": "You are not authorized to perform this action.",
118
+ "notFound": "Resource not found.",
119
+ "validation": "Please check your input and try again.",
120
+ "rateLimited": "Too many requests. Please wait a moment.",
121
+ "crashTitle": "Something went wrong",
122
+ "crashMessage": "The app encountered an unexpected error.",
123
+ "tryAgain": "Try Again",
124
+ "restartApp": "Restart App"
125
+ },
126
+ "forceUpdate": {
127
+ "title": "Update Required",
128
+ "message": "A new version of the app is available. Please update to continue.",
129
+ "button": "Update Now",
130
+ "currentVersion": "Current version",
131
+ "minimumVersion": "Minimum version"
132
+ },
133
+ "validation": {
134
+ "required": "This field is required",
135
+ "email": "Please enter a valid email",
136
+ "passwordMin": "Password must be at least 8 characters",
137
+ "passwordMatch": "Passwords do not match",
138
+ "nameMin": "Name must be at least 2 characters"
139
+ },
140
+ "permissions": {
141
+ "camera": "Camera access is needed to take photos.",
142
+ "location": "Location access is needed to show nearby results.",
143
+ "contacts": "Contacts access is needed to find friends.",
144
+ "mediaLibrary": "Photo library access is needed to select images.",
145
+ "microphone": "Microphone access is needed to record audio.",
146
+ "notifications": "Notification permission is needed to send you alerts.",
147
+ "openSettings": "Open Settings",
148
+ "allowAccess": "Allow Access",
149
+ "blocked": "Permission was denied. Please enable it in Settings."
150
+ },
151
+ "socialAuth": {
152
+ "continueWithGoogle": "Continue with Google",
153
+ "continueWithApple": "Continue with Apple",
154
+ "orContinueWith": "Or continue with"
155
+ },
156
+ "payments": {
157
+ "upgradeToPremium": "Upgrade to Premium",
158
+ "subscribe": "Subscribe",
159
+ "restore": "Restore purchases",
160
+ "perMonth": "/mo",
161
+ "perYear": "/yr"
162
+ },
163
+ "upload": {
164
+ "uploading": "Uploading...",
165
+ "complete": "Complete",
166
+ "failed": "Upload failed",
167
+ "retry": "Retry",
168
+ "addPhoto": "Add Photo"
169
+ }
170
+ }
@@ -1,101 +1,170 @@
1
- {
2
- "common": {
3
- "loading": "Cargando...",
4
- "error": "Error",
5
- "success": "Correcto",
6
- "cancel": "Cancelar",
7
- "confirm": "Confirmar",
8
- "save": "Guardar",
9
- "delete": "Eliminar",
10
- "edit": "Editar",
11
- "close": "Cerrar",
12
- "back": "Atrás",
13
- "next": "Siguiente",
14
- "done": "Hecho",
15
- "retry": "Reintentar",
16
- "search": "Buscar",
17
- "noResults": "No se encontraron resultados",
18
- "offline": "Estás sin conexión",
19
- "online": "Conexión restablecida"
20
- },
21
- "auth": {
22
- "signIn": "Iniciar sesión",
23
- "signUp": "Registrarse",
24
- "signOut": "Cerrar sesión",
25
- "email": "Correo electrónico",
26
- "password": "Contraseña",
27
- "confirmPassword": "Confirmar contraseña",
28
- "name": "Nombre",
29
- "forgotPassword": "¿Olvidaste tu contraseña?",
30
- "resetPassword": "Restablecer contraseña",
31
- "noAccount": "¿No tienes una cuenta?",
32
- "haveAccount": "¿Ya tienes una cuenta?",
33
- "welcomeBack": "¡Bienvenido de nuevo!",
34
- "signInToContinue": "Inicia sesión para continuar",
35
- "createAccount": "Crear cuenta",
36
- "joinUs": "Únete hoy",
37
- "enterEmail": "Ingresa tu correo electrónico",
38
- "enterPassword": "Ingresa tu contraseña",
39
- "enterName": "Ingresa tu nombre",
40
- "passwordHint": "Mínimo 8 caracteres",
41
- "invalidCredentials": "Correo o contraseña inválidos",
42
- "accountCreated": "¡Cuenta creada exitosamente!",
43
- "sessionExpired": "Sesión expirada. Por favor inicia sesión nuevamente.",
44
- "biometric": {
45
- "title": "Autenticación biométrica",
46
- "prompt": "Autentícate para continuar",
47
- "fallback": "Usar código de acceso",
48
- "enabled": "Inicio de sesión biométrico activado",
49
- "disabled": "Inicio de sesión biométrico desactivado",
50
- "notAvailable": "Autenticación biométrica no disponible"
51
- }
52
- },
53
- "navigation": {
54
- "home": "Inicio",
55
- "profile": "Perfil",
56
- "settings": "Configuración",
57
- "notifications": "Notificaciones"
58
- },
59
- "profile": {
60
- "title": "Perfil",
61
- "editProfile": "Editar perfil",
62
- "changePhoto": "Cambiar foto",
63
- "personalInfo": "Información personal",
64
- "memberSince": "Miembro desde {{date}}"
65
- },
66
- "settings": {
67
- "title": "Configuración",
68
- "appearance": "Apariencia",
69
- "theme": "Tema",
70
- "themeLight": "Claro",
71
- "themeDark": "Oscuro",
72
- "themeSystem": "Sistema",
73
- "language": "Idioma",
74
- "notifications": "Notificaciones",
75
- "pushNotifications": "Notificaciones push",
76
- "emailNotifications": "Notificaciones por correo",
77
- "security": "Seguridad",
78
- "biometricAuth": "Autenticación biométrica",
79
- "changePassword": "Cambiar contraseña",
80
- "privacy": "Política de privacidad",
81
- "terms": "Términos de servicio",
82
- "about": "Acerca de",
83
- "version": "Versión",
84
- "deleteAccount": "Eliminar cuenta"
85
- },
86
- "errors": {
87
- "generic": "Algo salió mal",
88
- "network": "Error de red. Por favor verifica tu conexión.",
89
- "timeout": "Tiempo de espera agotado. Por favor intenta de nuevo.",
90
- "unauthorized": "No estás autorizado para realizar esta acción.",
91
- "notFound": "Recurso no encontrado.",
92
- "validation": "Por favor verifica tus datos e intenta de nuevo."
93
- },
94
- "validation": {
95
- "required": "Este campo es obligatorio",
96
- "email": "Por favor ingresa un correo válido",
97
- "passwordMin": "La contraseña debe tener al menos 8 caracteres",
98
- "passwordMatch": "Las contraseñas no coinciden",
99
- "nameMin": "El nombre debe tener al menos 2 caracteres"
100
- }
101
- }
1
+ {
2
+ "common": {
3
+ "loading": "Cargando...",
4
+ "error": "Error",
5
+ "success": "Correcto",
6
+ "cancel": "Cancelar",
7
+ "confirm": "Confirmar",
8
+ "save": "Guardar",
9
+ "delete": "Eliminar",
10
+ "edit": "Editar",
11
+ "close": "Cerrar",
12
+ "back": "Atrás",
13
+ "next": "Siguiente",
14
+ "done": "Hecho",
15
+ "retry": "Reintentar",
16
+ "search": "Buscar",
17
+ "noResults": "No se encontraron resultados",
18
+ "offline": "Estás sin conexión",
19
+ "online": "Conexión restablecida"
20
+ },
21
+ "auth": {
22
+ "signIn": "Iniciar sesión",
23
+ "signUp": "Registrarse",
24
+ "signOut": "Cerrar sesión",
25
+ "email": "Correo electrónico",
26
+ "password": "Contraseña",
27
+ "confirmPassword": "Confirmar contraseña",
28
+ "name": "Nombre",
29
+ "forgotPassword": "¿Olvidaste tu contraseña?",
30
+ "resetPassword": "Restablecer contraseña",
31
+ "noAccount": "¿No tienes una cuenta?",
32
+ "haveAccount": "¿Ya tienes una cuenta?",
33
+ "welcomeBack": "¡Bienvenido de nuevo!",
34
+ "signInToContinue": "Inicia sesión para continuar",
35
+ "createAccount": "Crear cuenta",
36
+ "joinUs": "Únete hoy",
37
+ "enterEmail": "Ingresa tu correo electrónico",
38
+ "enterPassword": "Ingresa tu contraseña",
39
+ "enterName": "Ingresa tu nombre",
40
+ "passwordHint": "Mínimo 8 caracteres",
41
+ "invalidCredentials": "Correo o contraseña inválidos",
42
+ "accountCreated": "¡Cuenta creada exitosamente!",
43
+ "sessionExpired": "Sesión expirada. Por favor inicia sesión nuevamente.",
44
+ "createPasswordPlaceholder": "Crea una contraseña",
45
+ "confirmPasswordPlaceholder": "Confirma tu contraseña",
46
+ "passwordHintFull": "Mín 8 car., 1 mayúscula, 1 minúscula, 1 número",
47
+ "biometric": {
48
+ "title": "Autenticación biométrica",
49
+ "prompt": "Autentícate para continuar",
50
+ "fallback": "Usar código de acceso",
51
+ "enabled": "Inicio de sesión biométrico activado",
52
+ "disabled": "Inicio de sesión biométrico desactivado",
53
+ "notAvailable": "Autenticación biométrica no disponible"
54
+ }
55
+ },
56
+ "forgotPassword": {
57
+ "title": "Contraseña olvidada",
58
+ "subtitle": "Ingresa tu correo y te enviaremos un enlace de restablecimiento",
59
+ "sendResetLink": "Enviar enlace de restablecimiento",
60
+ "checkEmail": "Revisa tu correo",
61
+ "resetSent": "Hemos enviado un enlace de restablecimiento a {{email}}",
62
+ "backToSignIn": "Volver a iniciar sesión",
63
+ "rememberPassword": "¿Recuerdas tu contraseña?",
64
+ "emailRequired": "Por favor ingresa tu correo electrónico",
65
+ "sendFailed": "Error al enviar el enlace. Por favor intenta de nuevo."
66
+ },
67
+ "home": {
68
+ "welcomeBack": "¡Bienvenido de nuevo, {{name}}!",
69
+ "quickActions": "Acciones rápidas",
70
+ "newItem": "Nuevo elemento",
71
+ "stats": "Estadísticas",
72
+ "recentActivity": "Actividad reciente",
73
+ "noRecentActivity": "Sin actividad reciente",
74
+ "activityWillAppear": "Tu actividad aparecerá aquí"
75
+ },
76
+ "navigation": {
77
+ "home": "Inicio",
78
+ "profile": "Perfil",
79
+ "settings": "Configuración",
80
+ "notifications": "Notificaciones"
81
+ },
82
+ "profile": {
83
+ "title": "Perfil",
84
+ "editProfile": "Editar perfil",
85
+ "changePhoto": "Cambiar foto",
86
+ "personalInfo": "Información personal",
87
+ "memberSince": "Miembro desde {{date}}",
88
+ "privacySecurity": "Privacidad y seguridad",
89
+ "helpSupport": "Ayuda y soporte"
90
+ },
91
+ "settings": {
92
+ "title": "Configuración",
93
+ "appearance": "Apariencia",
94
+ "theme": "Tema",
95
+ "themeLight": "Claro",
96
+ "themeDark": "Oscuro",
97
+ "themeSystem": "Sistema",
98
+ "language": "Idioma",
99
+ "notifications": "Notificaciones",
100
+ "pushNotifications": "Notificaciones push",
101
+ "emailNotifications": "Notificaciones por correo",
102
+ "security": "Seguridad",
103
+ "biometricAuth": "Autenticación biométrica",
104
+ "changePassword": "Cambiar contraseña",
105
+ "privacy": "Política de privacidad",
106
+ "terms": "Términos de servicio",
107
+ "about": "Acerca de",
108
+ "version": "Versión",
109
+ "deleteAccount": "Eliminar cuenta",
110
+ "darkMode": "Modo oscuro",
111
+ "appVersion": "Versión de la aplicación"
112
+ },
113
+ "errors": {
114
+ "generic": "Algo salió mal",
115
+ "network": "Error de red. Por favor verifica tu conexión.",
116
+ "timeout": "Tiempo de espera agotado. Por favor intenta de nuevo.",
117
+ "unauthorized": "No estás autorizado para realizar esta acción.",
118
+ "notFound": "Recurso no encontrado.",
119
+ "validation": "Por favor verifica tus datos e intenta de nuevo.",
120
+ "rateLimited": "Demasiadas solicitudes. Por favor espera un momento.",
121
+ "crashTitle": "Algo salió mal",
122
+ "crashMessage": "La aplicación encontró un error inesperado.",
123
+ "tryAgain": "Intentar de nuevo",
124
+ "restartApp": "Reiniciar aplicación"
125
+ },
126
+ "forceUpdate": {
127
+ "title": "Actualización requerida",
128
+ "message": "Una nueva versión de la aplicación está disponible. Por favor actualiza para continuar.",
129
+ "button": "Actualizar ahora",
130
+ "currentVersion": "Versión actual",
131
+ "minimumVersion": "Versión mínima"
132
+ },
133
+ "validation": {
134
+ "required": "Este campo es obligatorio",
135
+ "email": "Por favor ingresa un correo válido",
136
+ "passwordMin": "La contraseña debe tener al menos 8 caracteres",
137
+ "passwordMatch": "Las contraseñas no coinciden",
138
+ "nameMin": "El nombre debe tener al menos 2 caracteres"
139
+ },
140
+ "permissions": {
141
+ "camera": "Se necesita acceso a la cámara para tomar fotos.",
142
+ "location": "Se necesita acceso a la ubicación para mostrar resultados cercanos.",
143
+ "contacts": "Se necesita acceso a los contactos para encontrar amigos.",
144
+ "mediaLibrary": "Se necesita acceso a la galería para seleccionar imágenes.",
145
+ "microphone": "Se necesita acceso al micrófono para grabar audio.",
146
+ "notifications": "Se necesita permiso de notificaciones para enviarte alertas.",
147
+ "openSettings": "Abrir configuración",
148
+ "allowAccess": "Permitir acceso",
149
+ "blocked": "El permiso fue denegado. Por favor actívalo en Configuración."
150
+ },
151
+ "socialAuth": {
152
+ "continueWithGoogle": "Continuar con Google",
153
+ "continueWithApple": "Continuar con Apple",
154
+ "orContinueWith": "O continuar con"
155
+ },
156
+ "payments": {
157
+ "upgradeToPremium": "Mejorar a Premium",
158
+ "subscribe": "Suscribirse",
159
+ "restore": "Restaurar compras",
160
+ "perMonth": "/mes",
161
+ "perYear": "/año"
162
+ },
163
+ "upload": {
164
+ "uploading": "Subiendo...",
165
+ "complete": "Completado",
166
+ "failed": "Error al subir",
167
+ "retry": "Reintentar",
168
+ "addPhoto": "Agregar foto"
169
+ }
170
+ }