WellNuo/packages/@wellnuo/ui/MIGRATION.md
Sergei 5dc348107a Add shared UI library (@wellnuo/ui)
Created a comprehensive shared UI component library to eliminate code
duplication across WellNuo apps (main app and WellNuoLite).

## Components Added
- Button (merged features from both apps - icons, 5 variants, shadows)
- Input (with left/right icons, password toggle, error states)
- LoadingSpinner (inline and fullscreen variants)
- ErrorMessage & FullScreenError (with retry/skip/dismiss actions)
- ThemedText & ThemedView (theme-aware utilities)
- ExternalLink (for opening external URLs)

## Design System
- Exported complete theme system (colors, spacing, typography, shadows)
- 73+ color definitions, 7 spacing levels, 8 shadow presets
- Consistent design tokens across all apps

## Infrastructure
- Set up npm workspaces for monorepo support
- Added comprehensive test suite (41 passing tests)
- TypeScript configuration with strict mode
- Jest configuration for testing
- README and migration guide

## Benefits
- Eliminates ~1,500 lines of duplicate code
- Ensures UI consistency across apps
- Single source of truth for design system
- Easier maintenance and updates
- Type-safe component library

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-31 18:00:24 -08:00

125 lines
3.2 KiB
Markdown

# Migration Guide
## Migrating Main App to @wellnuo/ui
### 1. Install dependencies
```bash
cd /Users/sergei/Documents/Projects/WellNuo
npm install
```
### 2. Update imports
Replace old imports with new ones:
**Before:**
```typescript
import { Button } from '@/components/ui/Button';
import { Input } from '@/components/ui/Input';
import { LoadingSpinner } from '@/components/ui/LoadingSpinner';
import { ErrorMessage } from '@/components/ui/ErrorMessage';
import { ThemedText } from '@/components/themed-text';
import { ThemedView } from '@/components/themed-view';
import { AppColors, Spacing } from '@/constants/theme';
import { useThemeColor } from '@/hooks/use-theme-color';
```
**After:**
```typescript
import { Button, Input, LoadingSpinner, ErrorMessage } from '@wellnuo/ui';
import { ThemedText, ThemedView } from '@wellnuo/ui';
import { AppColors, Spacing } from '@wellnuo/ui';
import { useThemeColor } from '@wellnuo/ui';
```
### 3. Update TypeScript paths (optional)
If you want to keep using the `@/` alias for app-specific code while using `@wellnuo/ui` for shared components, update `tsconfig.json`:
```json
{
"compilerOptions": {
"paths": {
"@/*": ["./*"],
"@wellnuo/ui": ["./packages/@wellnuo/ui/src"]
}
}
}
```
### 4. Remove duplicate components (after migration complete)
Once all imports are updated and tested:
```bash
# Remove old UI components
rm -rf components/ui/Button.tsx
rm -rf components/ui/Input.tsx
rm -rf components/ui/LoadingSpinner.tsx
rm -rf components/ui/ErrorMessage.tsx
rm -rf components/themed-text.tsx
rm -rf components/themed-view.tsx
rm -rf components/external-link.tsx
# Keep the old theme.ts as a re-export for backward compatibility
# Or update constants/theme.ts to re-export from @wellnuo/ui
```
### 5. Update constants/theme.ts (optional backward compatibility)
Create a re-export file to maintain backward compatibility:
```typescript
// constants/theme.ts
export * from '@wellnuo/ui';
```
This allows existing code using `@/constants/theme` to keep working.
## Migrating WellNuoLite
Follow the same steps for WellNuoLite:
1. Update `WellNuoLite/package.json` to include `@wellnuo/ui` dependency
2. Update imports in all components
3. Remove duplicate components after migration
4. Test thoroughly
## Find and Replace Commands
Use these commands to help automate the migration:
```bash
# Find all imports from old locations
grep -r "from '@/components/ui/" .
grep -r "from '@/components/themed-" .
grep -r "from '@/constants/theme'" .
# Example: Update Button imports
find . -name "*.tsx" -o -name "*.ts" | xargs sed -i '' "s|from '@/components/ui/Button'|from '@wellnuo/ui'|g"
```
## Testing Checklist
After migration:
- [ ] All UI components render correctly
- [ ] Theme colors are applied properly
- [ ] Buttons respond to interactions
- [ ] Inputs handle text entry and validation
- [ ] Loading states display correctly
- [ ] Error messages show with proper actions
- [ ] All existing tests pass
- [ ] No console errors or warnings
- [ ] Build succeeds without errors
## Rollback Plan
If issues arise:
1. Revert package.json changes
2. Run `npm install`
3. Revert import changes
4. Report issues to the development team