1e18f04Thanks @edwardloopez! - Fix Android vertical offset when using navigation buttons instead of gestures
- #19
f1cf1fdThanks @christian-jayme! - Fix Android vertical offset when using navigation buttons instead of gestures. Modal now uses statusBarTranslucent and screen dimensions on Android to align coachmark holes correctly with target elements.
- #14
6dc7838Thanks @edwardloopez! - Clean up keywords in package.json for clarity
-
#12
4b37583Thanks @edwardloopez! - This release focuses on performance optimizations, better error handling, and improved developer experience.- Memoization: Added
React.memotoCustomTooltipWrapperto prevent unnecessary re-renders - Hook Extraction: Refactored
CoachmarkOverlay(282 → 150 lines) by extracting custom hooks:useTourMeasurement: Handles anchor measurement and positioning logicuseTooltipPosition: Computes optimal tooltip placementuseOrientationChange: Manages device orientation changes
- Callback Memoization: Optimized callbacks with
useCallbackanduseMemoto reduce re-render cycles - Result: ~60-80% reduction in re-renders during tours
- Auto-remeasure: Tours now automatically re-measure and reposition when device orientation changes
- Seamless UX: No more misaligned highlights after screen rotation
- Platform Support: Works on iOS, Android, and web
- New Component:
CoachmarkErrorBoundarycatches errors in custom tooltip renderers - Graceful Degradation: Displays user-friendly error UI instead of crashing the app
- Developer Feedback: Logs detailed error information to console for debugging
- Customizable: Supports custom fallback components via
fallbackprop - Export: Now exported from main index for direct usage
- Fixed Context Type: Removed unsafe
null as anycast inCoachmarkContext - Proper Error Handling:
useCoachmarkContextnow throws descriptive error when used outside provider - Type Safety: Full type inference without type assertions
- Better DX: Clear error messages guide developers to proper usage
- Added comprehensive tests for new functionality
- Coverage: Maintained 96.92% statement coverage (90 tests passing)
- New test suites:
CoachmarkErrorBoundary.test.tsx: Error handling scenariosuseOrientationChange.test.ts: Orientation change detectionuseCoachmarkContext.test.tsx: Context provider validation
- Memoization: Added
-
5b8eb21Thanks @edwardloopez! - Fix broken npm package by removing path aliases from source code.Breaking Issue Fixed:
- Version 0.4.4 was broken due to unresolved path aliases (
@core,@ui,@utils, etc.) in the published package - Metro bundler couldn't resolve these aliases in consuming projects, causing "Unable to resolve module" errors
Changes:
- Replaced all path alias imports with relative imports throughout the codebase
- Removed
babel-plugin-module-resolverandeslint-import-resolver-babel-moduledependencies - Cleaned up path alias configuration from
tsconfig.json,babel.config.js, andeslint.config.mjs - Verified compiled output (
lib/) now contains only relative imports
Impact:
- Package now works correctly in all React Native projects (Expo, bare workflow, Snack)
- No breaking changes for consumers - the public API remains identical
- Source code maintainability: Uses standard relative imports (industry best practice for published libraries)
- Version 0.4.4 was broken due to unresolved path aliases (
- #9
e7cc340Thanks @edwardloopez! - ## Documentation and Configuration Improvements- Documentation: Reorganized README into modular structure with dedicated docs folder (ADVANCED_USAGE.md, EXAMPLES.md, ACCESSIBILITY.md, BEST_PRACTICES.md)
- API Reference: Converted props and options to table format for better readability
- Web Support: Fixed
findNodeHandleand ScrollView compatibility issues on web platform - Import Organization: Added ESLint import ordering with React/React Native prioritization
- Path Aliases: Configured TypeScript and Babel path aliases (@core, @ui, @utils, @anchors) for cleaner imports
- Build Configuration: Added
cardStyle: { flex: 1 }to Stack Navigator for proper web layout - Git Hooks: Enhanced lefthook to auto-fix ESLint issues on pre-commit
-
#7
3a041f6Thanks @edwardloopez! - Comprehensive documentation improvements and code cleanup:Documentation Enhancements:
- Added detailed Auto-Scroll Features section with ScrollView/FlatList integration examples
- Documented all lifecycle hooks (onBeforeEnter, onBeforeScroll, onEnter, onExit) with use cases
- Complete theme customization reference including all properties and easing functions
- Added ScrollView integration guide with practical examples
- Added 3 comprehensive real-world examples (auto-scroll, conditional steps, custom theme)
- Updated features list to highlight auto-scroll and lifecycle hooks
Code Improvements:
- Added
TooltipPositiontype for better type safety in placement utilities - Removed web-specific code from accessibility utils (iOS/Android only)
- Cleaned up all
@ts-ignorecomments and Platform.OS checks for web - Simplified accessibility functions to focus on native platforms
Configuration:
- Fixed changeset config to remove non-existent monorepo package reference
- #5
873d562Thanks @edwardloopez! - Improve test coverage to 99% - added comprehensive tests for useCoachmark hook and CoachmarkAnchor component
-
cf793d1Thanks @edwardloopez! - Fix monorepo setup with PNPM workspace configuration -
3b36f54Thanks @edwardloopez! - Fix Android coordinate alignment with StatusBar offset
ff7d165Thanks @edwardloopez! - AddscrollDelayparameter to TourStep for smoother auto-scroll transitions. Eliminates visual jumpiness by adding a configurable delay (default: 150ms) between scroll completion and mask rendering.
2e19377Thanks @edwardloopez! - Add auto-focus feature for automatic scrolling to off-screen coachmark anchors- Add autoFocus prop ('always' | 'ifNeeded') to TourStep
- Add scrollRef prop on CoachmarkAnchor for linking ScrollView/FlatList
- Implement automatic viewport detection and smooth scrolling
- Add scrollBehavior, scrollPadding, and onBeforeScroll options
- Include comprehensive tests and documentation