@croacroa/react-native-template 2.1.0 → 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 -21
  10. package/README.md +446 -402
  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 -418
  69. package/components/ui/UploadProgress.tsx +189 -0
  70. package/components/ui/VirtualizedList.tsx +288 -285
  71. package/components/ui/index.ts +28 -30
  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 -40
  89. package/hooks/useAnimatedEntry.ts +204 -0
  90. package/hooks/useApi.ts +5 -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 -375
  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 -176
  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
package/CHANGELOG.md CHANGED
@@ -1,106 +1,195 @@
1
- # Changelog
2
-
3
- All notable changes to this project will be documented in this file.
4
-
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
-
8
- ## [Unreleased]
9
-
10
- ### Added
11
-
12
- - Auth adapter pattern for easy provider switching (Supabase, Firebase, etc.)
13
- - Internationalization (i18n) support with expo-localization and i18next
14
- - English and French translations included
15
- - Language detection and persistence
16
- - New UI components:
17
- - `Select` - Dropdown/picker component
18
- - `Checkbox` and `CheckboxGroup` - Animated checkbox components
19
- - `BottomSheet` - Modal bottom sheet with @gorhom/bottom-sheet
20
- - `Avatar` and `AvatarGroup` - User avatar components
21
- - `Badge`, `Chip`, and `CountBadge` - Label/tag components
22
- - `OptimizedImage` - High-performance image component with expo-image
23
- - Deep linking support with `useDeepLinking` hook
24
- - Biometric authentication with `useBiometrics` hook
25
- - Analytics adapter for multiple providers (Mixpanel, Amplitude, etc.)
26
- - Rate limiting for API calls using Bottleneck
27
- - E2E testing setup with Maestro
28
- - Login, registration, navigation, and offline flow tests
29
- - Project documentation:
30
- - CONTRIBUTING.md
31
- - CHANGELOG.md
32
- - Architecture Decision Records (ADRs)
33
- - GitHub Actions CI/CD workflows:
34
- - Lint, test, and build checks
35
- - Maestro Cloud E2E tests
36
- - EAS Build workflow (manual trigger)
37
- - EAS Update workflow (OTA on push to main)
38
- - Onboarding screens with animated pagination
39
- - OTA updates support with `useUpdates` hook
40
- - Performance monitoring with `usePerformance` hook
41
- - Comprehensive accessibility utilities:
42
- - Builder functions for all UI patterns (button, input, toggle, etc.)
43
- - Hooks for screen reader, reduce motion, and bold text preferences
44
- - Utility functions for announcements and focus management
45
-
46
- ### Changed
47
-
48
- - Primary color changed from blue to emerald green (croacroa branding)
49
- - API client now includes rate limiting protection
50
-
51
- ### Dependencies Added
52
-
53
- - `@gorhom/bottom-sheet` ^4.6.0
54
- - `bottleneck` ^2.19.5
55
- - `expo-image` ~2.0.0
56
- - `expo-local-authentication` ~15.0.0
57
- - `expo-localization` ~15.0.0
58
- - `i18next` ^23.0.0
59
- - `react-i18next` ^14.0.0
60
-
61
- ## [1.0.0] - 2024-01-01
62
-
63
- ### Added
64
-
65
- - Initial release
66
- - Expo SDK 52 with React Native 0.76
67
- - Expo Router for file-based navigation
68
- - Authentication flow with secure token storage
69
- - React Query for data fetching with offline support
70
- - Zustand for state management
71
- - NativeWind (Tailwind CSS) for styling
72
- - React Hook Form with Zod validation
73
- - Push notifications with Expo Notifications
74
- - Error tracking with Sentry
75
- - Storybook for component documentation
76
- - Jest and Testing Library for unit tests
77
- - Dark mode support
78
- - Basic UI components (Button, Input, Card, Modal, Skeleton)
79
- - Animated components with Reanimated
80
- - Toast notifications with Burnt
81
-
82
- ### Infrastructure
83
-
84
- - EAS Build configuration for dev/preview/production
85
- - ESLint and Prettier setup
86
- - Husky pre-commit hooks
87
- - TypeScript strict mode
88
-
89
- ---
90
-
91
- ## Versioning Guide
92
-
93
- ### Version Format: MAJOR.MINOR.PATCH
94
-
95
- - **MAJOR**: Breaking changes
96
- - **MINOR**: New features (backwards compatible)
97
- - **PATCH**: Bug fixes (backwards compatible)
98
-
99
- ### Changelog Categories
100
-
101
- - **Added**: New features
102
- - **Changed**: Changes to existing functionality
103
- - **Deprecated**: Features to be removed
104
- - **Removed**: Removed features
105
- - **Fixed**: Bug fixes
106
- - **Security**: Security improvements
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [3.2.0] - 2026-02-23
9
+
10
+ ### Added — Phase 8: Additional Features
11
+
12
+ - **Rate Limiting UI** 429 response interception with `Retry-After` parsing, toast feedback, `useRateLimit` hook with countdown
13
+ - **App Force Update** Version comparison service, `useForceUpdate` hook, non-dismissible `ForceUpdateScreen` component
14
+ - **In-App Review** — `useInAppReview` hook with session counting and throttle via AsyncStorage, powered by `expo-store-review`
15
+ - **Crash Recovery** — Enhanced `ErrorBoundary` with soft reset (re-render) and hard reset (clear stores + `Updates.reloadAsync()`), crash counter with Sentry context
16
+ - **Feature Flags + A/B Testing** — `FeatureFlagAdapter` interface, `FeatureFlags` facade with `setAdapter()`, `MockFeatureFlagAdapter`, `useFeatureFlag`/`useExperiment` hooks, `FeatureGate` component
17
+ - **Accessibility Tests** 26 a11y tests for Button, Input, Checkbox, Modal, Card with reusable assertion helpers
18
+ - **HTTP ETag Caching** — In-memory ETag cache with LRU eviction in `ApiClient`, `If-None-Match`/304 handling
19
+ - **LaunchDarkly Integration Guide** Complete adapter implementation guide
20
+
21
+ ### Changed
22
+
23
+ - `Button` component now includes `accessibilityRole="button"` and `accessibilityState`
24
+
25
+ ### Dependencies Added
26
+
27
+ - `expo-store-review`
28
+
29
+ ---
30
+
31
+ ## [3.1.0] - 2026-02-23
32
+
33
+ ### Added Phase 7: Polish & Documentation
34
+
35
+ - **Screen Internationalization** All 6 screens (login, register, forgot-password, home, profile, settings) fully migrated to i18n with 56 strings replaced
36
+ - **i18n Completeness** 23 new keys added to all 5 locales (en, fr, es, de, ar), including `forgotPassword.*` and `home.*` sections
37
+ - **Phase 6 Hook Tests** — 57 unit tests across 6 files covering all 13 Phase 6 hooks (permissions, payments, media, WebSocket, animations, analytics)
38
+ - **Integration Guides** Copy-paste-ready adapter guides for Supabase (auth), RevenueCat (payments), PostHog (analytics)
39
+
40
+ ---
41
+
42
+ ## [3.0.0] - 2026-02-22
43
+
44
+ ### Added Phase 6: Template Completion
45
+
46
+ - **Permission Management** (turnkey)
47
+ - Centralized `PermissionManager` service for all Expo permissions
48
+ - `usePermission` hook with auto-refresh on app resume
49
+ - `PermissionGate` component for declarative permission-gated UI
50
+ - Support: camera, location, contacts, media library, microphone, notifications
51
+ - **Animations / UX Polish** (turnkey)
52
+ - Animation presets (timing, spring) and entry animation configs
53
+ - Screen transition presets for Expo Router (slide, fade, modal, etc.)
54
+ - `useAnimatedEntry` and `useStaggeredEntry` hooks
55
+ - `useParallax` hook for scroll parallax effects
56
+ - `AnimatedScreen` and `AnimatedListItem` components
57
+ - **Social Login** (turnkey)
58
+ - Google Sign-In via `expo-auth-session` with PKCE
59
+ - Apple Sign-In via `expo-apple-authentication` (iOS)
60
+ - `SocialAuth` orchestrator with configurable providers
61
+ - `SocialLoginButtons` component with platform-aware display
62
+ - **Analytics** (adapter pattern)
63
+ - `AnalyticsAdapter` interface following auth adapter pattern
64
+ - Console adapter for development
65
+ - `useTrackScreen` hook (auto-tracks Expo Router navigation)
66
+ - `useTrackEvent` hook for custom events
67
+ - `AnalyticsProvider` with automatic initialization
68
+ - **Payment Infrastructure** (adapter pattern)
69
+ - `PaymentAdapter` interface with mock implementation
70
+ - `useProducts`, `usePurchase`, `useSubscription` hooks
71
+ - `Paywall` and `PurchaseButton` components
72
+ - **File Upload / Media**
73
+ - Media picker service (camera + library)
74
+ - Image compression service via `expo-image-manipulator`
75
+ - Upload service with progress tracking, cancel, retry
76
+ - `useImagePicker` and `useUpload` hooks
77
+ - `ImagePickerButton` and `UploadProgress` components
78
+ - **WebSockets / Real-time**
79
+ - `WebSocketManager` with auto-reconnect and exponential backoff
80
+ - Heartbeat, offline queue, auth token injection
81
+ - `useWebSocket`, `useChannel`, `usePresence` hooks
82
+
83
+ ### Dependencies Added
84
+
85
+ - `expo-camera`
86
+ - `expo-location`
87
+ - `expo-contacts`
88
+ - `expo-media-library`
89
+ - `expo-auth-session`
90
+ - `expo-web-browser`
91
+ - `expo-apple-authentication`
92
+ - `expo-crypto`
93
+ - `expo-image-manipulator`
94
+
95
+ ---
96
+
97
+ ## [Unreleased]
98
+
99
+ ### Added
100
+
101
+ - Auth adapter pattern for easy provider switching (Supabase, Firebase, etc.)
102
+ - Internationalization (i18n) support with expo-localization and i18next
103
+ - English and French translations included
104
+ - Language detection and persistence
105
+ - New UI components:
106
+ - `Select` - Dropdown/picker component
107
+ - `Checkbox` and `CheckboxGroup` - Animated checkbox components
108
+ - `BottomSheet` - Modal bottom sheet with @gorhom/bottom-sheet
109
+ - `Avatar` and `AvatarGroup` - User avatar components
110
+ - `Badge`, `Chip`, and `CountBadge` - Label/tag components
111
+ - `OptimizedImage` - High-performance image component with expo-image
112
+ - Deep linking support with `useDeepLinking` hook
113
+ - Biometric authentication with `useBiometrics` hook
114
+ - Analytics adapter for multiple providers (Mixpanel, Amplitude, etc.)
115
+ - Rate limiting for API calls using Bottleneck
116
+ - E2E testing setup with Maestro
117
+ - Login, registration, navigation, and offline flow tests
118
+ - Project documentation:
119
+ - CONTRIBUTING.md
120
+ - CHANGELOG.md
121
+ - Architecture Decision Records (ADRs)
122
+ - GitHub Actions CI/CD workflows:
123
+ - Lint, test, and build checks
124
+ - Maestro Cloud E2E tests
125
+ - EAS Build workflow (manual trigger)
126
+ - EAS Update workflow (OTA on push to main)
127
+ - Onboarding screens with animated pagination
128
+ - OTA updates support with `useUpdates` hook
129
+ - Performance monitoring with `usePerformance` hook
130
+ - Comprehensive accessibility utilities:
131
+ - Builder functions for all UI patterns (button, input, toggle, etc.)
132
+ - Hooks for screen reader, reduce motion, and bold text preferences
133
+ - Utility functions for announcements and focus management
134
+
135
+ ### Changed
136
+
137
+ - Primary color changed from blue to emerald green (croacroa branding)
138
+ - API client now includes rate limiting protection
139
+
140
+ ### Dependencies Added
141
+
142
+ - `@gorhom/bottom-sheet` ^4.6.0
143
+ - `bottleneck` ^2.19.5
144
+ - `expo-image` ~2.0.0
145
+ - `expo-local-authentication` ~15.0.0
146
+ - `expo-localization` ~15.0.0
147
+ - `i18next` ^23.0.0
148
+ - `react-i18next` ^14.0.0
149
+
150
+ ## [1.0.0] - 2024-01-01
151
+
152
+ ### Added
153
+
154
+ - Initial release
155
+ - Expo SDK 52 with React Native 0.76
156
+ - Expo Router for file-based navigation
157
+ - Authentication flow with secure token storage
158
+ - React Query for data fetching with offline support
159
+ - Zustand for state management
160
+ - NativeWind (Tailwind CSS) for styling
161
+ - React Hook Form with Zod validation
162
+ - Push notifications with Expo Notifications
163
+ - Error tracking with Sentry
164
+ - Storybook for component documentation
165
+ - Jest and Testing Library for unit tests
166
+ - Dark mode support
167
+ - Basic UI components (Button, Input, Card, Modal, Skeleton)
168
+ - Animated components with Reanimated
169
+ - Toast notifications with Burnt
170
+
171
+ ### Infrastructure
172
+
173
+ - EAS Build configuration for dev/preview/production
174
+ - ESLint and Prettier setup
175
+ - Husky pre-commit hooks
176
+ - TypeScript strict mode
177
+
178
+ ---
179
+
180
+ ## Versioning Guide
181
+
182
+ ### Version Format: MAJOR.MINOR.PATCH
183
+
184
+ - **MAJOR**: Breaking changes
185
+ - **MINOR**: New features (backwards compatible)
186
+ - **PATCH**: Bug fixes (backwards compatible)
187
+
188
+ ### Changelog Categories
189
+
190
+ - **Added**: New features
191
+ - **Changed**: Changes to existing functionality
192
+ - **Deprecated**: Features to be removed
193
+ - **Removed**: Removed features
194
+ - **Fixed**: Bug fixes
195
+ - **Security**: Security improvements