@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.
- package/.env.example +5 -0
- package/.eslintrc.js +8 -0
- package/.github/workflows/ci.yml +187 -187
- package/.github/workflows/eas-build.yml +55 -55
- package/.github/workflows/eas-update.yml +50 -50
- package/.github/workflows/npm-publish.yml +57 -0
- package/CHANGELOG.md +195 -106
- package/CONTRIBUTING.md +377 -377
- package/LICENSE +21 -0
- package/README.md +446 -399
- package/__tests__/accessibility/components.test.tsx +285 -0
- package/__tests__/components/Button.test.tsx +2 -4
- package/__tests__/components/__snapshots__/snapshots.test.tsx.snap +512 -0
- package/__tests__/components/snapshots.test.tsx +131 -131
- package/__tests__/helpers/a11y.ts +54 -0
- package/__tests__/hooks/useAnalytics.test.ts +100 -0
- package/__tests__/hooks/useAnimations.test.ts +70 -0
- package/__tests__/hooks/useAuth.test.tsx +71 -28
- package/__tests__/hooks/useMedia.test.ts +318 -0
- package/__tests__/hooks/usePayments.test.tsx +307 -0
- package/__tests__/hooks/usePermission.test.ts +230 -0
- package/__tests__/hooks/useWebSocket.test.ts +329 -0
- package/__tests__/integration/auth-api.test.tsx +224 -227
- package/__tests__/performance/VirtualizedList.perf.test.tsx +385 -362
- package/__tests__/services/api.test.ts +24 -6
- package/app/(auth)/home.tsx +11 -9
- package/app/(auth)/profile.tsx +8 -6
- package/app/(auth)/settings.tsx +11 -9
- package/app/(public)/forgot-password.tsx +25 -15
- package/app/(public)/login.tsx +48 -12
- package/app/(public)/onboarding.tsx +5 -5
- package/app/(public)/register.tsx +24 -15
- package/app/_layout.tsx +6 -3
- package/app.config.ts +27 -2
- package/assets/images/.gitkeep +7 -7
- package/assets/images/adaptive-icon.png +0 -0
- package/assets/images/favicon.png +0 -0
- package/assets/images/icon.png +0 -0
- package/assets/images/notification-icon.png +0 -0
- package/assets/images/splash.png +0 -0
- package/components/ErrorBoundary.tsx +73 -28
- package/components/auth/SocialLoginButtons.tsx +168 -0
- package/components/forms/FormInput.tsx +5 -3
- package/components/onboarding/OnboardingScreen.tsx +370 -370
- package/components/onboarding/index.ts +2 -2
- package/components/providers/AnalyticsProvider.tsx +67 -0
- package/components/providers/SuspenseBoundary.tsx +359 -357
- package/components/providers/index.ts +24 -21
- package/components/ui/AnimatedButton.tsx +1 -9
- package/components/ui/AnimatedList.tsx +98 -0
- package/components/ui/AnimatedScreen.tsx +89 -0
- package/components/ui/Avatar.tsx +319 -316
- package/components/ui/Badge.tsx +416 -416
- package/components/ui/BottomSheet.tsx +307 -307
- package/components/ui/Button.tsx +11 -3
- package/components/ui/Checkbox.tsx +261 -261
- package/components/ui/FeatureGate.tsx +57 -0
- package/components/ui/ForceUpdateScreen.tsx +108 -0
- package/components/ui/ImagePickerButton.tsx +180 -0
- package/components/ui/Input.stories.tsx +2 -10
- package/components/ui/Input.tsx +2 -10
- package/components/ui/OptimizedImage.tsx +369 -369
- package/components/ui/Paywall.tsx +253 -0
- package/components/ui/PermissionGate.tsx +155 -0
- package/components/ui/PurchaseButton.tsx +84 -0
- package/components/ui/Select.tsx +240 -240
- package/components/ui/Skeleton.tsx +3 -1
- package/components/ui/Toast.tsx +427 -0
- package/components/ui/UploadProgress.tsx +189 -0
- package/components/ui/VirtualizedList.tsx +288 -285
- package/components/ui/index.ts +28 -23
- package/constants/config.ts +135 -97
- package/docs/adr/001-state-management.md +79 -79
- package/docs/adr/002-styling-approach.md +130 -130
- package/docs/adr/003-data-fetching.md +155 -155
- package/docs/adr/004-auth-adapter-pattern.md +144 -144
- package/docs/adr/README.md +78 -78
- package/docs/guides/analytics-posthog.md +121 -0
- package/docs/guides/auth-supabase.md +162 -0
- package/docs/guides/feature-flags-launchdarkly.md +150 -0
- package/docs/guides/payments-revenuecat.md +169 -0
- package/docs/plans/2026-02-22-phase6-implementation.md +3222 -0
- package/docs/plans/2026-02-22-phase6-template-completion-design.md +196 -0
- package/docs/plans/2026-02-23-npm-publish-design.md +31 -0
- package/docs/plans/2026-02-23-phase7-polish-documentation-design.md +79 -0
- package/docs/plans/2026-02-23-phase8-additional-features-design.md +136 -0
- package/eas.json +2 -1
- package/hooks/index.ts +70 -27
- package/hooks/useAnimatedEntry.ts +204 -0
- package/hooks/useApi.ts +64 -4
- package/hooks/useAuth.tsx +7 -3
- package/hooks/useBiometrics.ts +295 -295
- package/hooks/useChannel.ts +111 -0
- package/hooks/useDeepLinking.ts +256 -256
- package/hooks/useExperiment.ts +36 -0
- package/hooks/useFeatureFlag.ts +59 -0
- package/hooks/useForceUpdate.ts +91 -0
- package/hooks/useImagePicker.ts +281 -0
- package/hooks/useInAppReview.ts +64 -0
- package/hooks/useMFA.ts +509 -499
- package/hooks/useParallax.ts +142 -0
- package/hooks/usePerformance.ts +434 -434
- package/hooks/usePermission.ts +190 -0
- package/hooks/usePresence.ts +129 -0
- package/hooks/useProducts.ts +36 -0
- package/hooks/usePurchase.ts +103 -0
- package/hooks/useRateLimit.ts +70 -0
- package/hooks/useSubscription.ts +49 -0
- package/hooks/useTrackEvent.ts +52 -0
- package/hooks/useTrackScreen.ts +40 -0
- package/hooks/useUpdates.ts +358 -358
- package/hooks/useUpload.ts +165 -0
- package/hooks/useWebSocket.ts +111 -0
- package/i18n/index.ts +197 -194
- package/i18n/locales/ar.json +170 -101
- package/i18n/locales/de.json +170 -101
- package/i18n/locales/en.json +170 -101
- package/i18n/locales/es.json +170 -101
- package/i18n/locales/fr.json +170 -101
- package/jest.config.js +1 -1
- package/maestro/README.md +113 -113
- package/maestro/config.yaml +35 -35
- package/maestro/flows/login.yaml +62 -62
- package/maestro/flows/mfa-login.yaml +92 -92
- package/maestro/flows/mfa-setup.yaml +86 -86
- package/maestro/flows/navigation.yaml +68 -68
- package/maestro/flows/offline-conflict.yaml +101 -101
- package/maestro/flows/offline-sync.yaml +128 -128
- package/maestro/flows/offline.yaml +60 -60
- package/maestro/flows/register.yaml +94 -94
- package/package.json +188 -175
- package/scripts/generate-placeholders.js +38 -0
- package/services/analytics/adapters/console.ts +50 -0
- package/services/analytics/analytics-adapter.ts +94 -0
- package/services/analytics/types.ts +73 -0
- package/services/analytics.ts +428 -428
- package/services/api.ts +419 -340
- package/services/auth/social/apple.ts +110 -0
- package/services/auth/social/google.ts +159 -0
- package/services/auth/social/social-auth.ts +100 -0
- package/services/auth/social/types.ts +80 -0
- package/services/authAdapter.ts +333 -333
- package/services/backgroundSync.ts +652 -626
- package/services/feature-flags/adapters/mock.ts +108 -0
- package/services/feature-flags/feature-flag-adapter.ts +174 -0
- package/services/feature-flags/types.ts +79 -0
- package/services/force-update.ts +140 -0
- package/services/index.ts +116 -54
- package/services/media/compression.ts +91 -0
- package/services/media/media-picker.ts +151 -0
- package/services/media/media-upload.ts +160 -0
- package/services/payments/adapters/mock.ts +159 -0
- package/services/payments/payment-adapter.ts +118 -0
- package/services/payments/types.ts +131 -0
- package/services/permissions/permission-manager.ts +284 -0
- package/services/permissions/types.ts +104 -0
- package/services/realtime/types.ts +100 -0
- package/services/realtime/websocket-manager.ts +441 -0
- package/services/security.ts +289 -286
- package/services/sentry.ts +4 -4
- package/stores/appStore.ts +9 -0
- package/stores/notificationStore.ts +3 -1
- package/tailwind.config.js +47 -47
- package/tsconfig.json +37 -13
- package/types/user.ts +1 -1
- package/utils/accessibility.ts +446 -446
- package/utils/animations/presets.ts +182 -0
- package/utils/animations/transitions.ts +62 -0
- package/utils/index.ts +63 -52
- package/utils/toast.ts +9 -2
- package/utils/validation.ts +4 -1
- 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
|
-
## [
|
|
9
|
-
|
|
10
|
-
### Added
|
|
11
|
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
-
|
|
54
|
-
- `
|
|
55
|
-
- `
|
|
56
|
-
- `
|
|
57
|
-
-
|
|
58
|
-
- `
|
|
59
|
-
- `
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
-
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
-
|
|
69
|
-
-
|
|
70
|
-
-
|
|
71
|
-
-
|
|
72
|
-
-
|
|
73
|
-
-
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
-
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
###
|
|
100
|
-
|
|
101
|
-
-
|
|
102
|
-
-
|
|
103
|
-
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
-
|
|
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
|