@whitemordred/react-native-bootstrap5
Version:
A complete React Native library that replicates Bootstrap 5.3 with 100% feature parity, full theming support, CSS variables, and dark/light mode
305 lines (225 loc) • 7.39 kB
Markdown
# Guide de Contribution
Merci de votre intérêt pour contribuer à React Native Bootstrap 5 ! Ce guide vous aidera à bien démarrer.
## 🚀 Configuration de l'environnement de développement
### Prérequis
- Node.js >= 16.0.0
- npm >= 8.0.0 ou yarn >= 1.22.0
- React Native development environment configuré
### Installation
1. Fork le repository
2. Clone votre fork :
```bash
git clone https://github.com/votre-username/react-native-bootstrap5.git
cd react-native-bootstrap5
```
3. Installez les dépendances :
```bash
npm install --legacy-peer-deps
```
4. Lancez le build en mode watch :
```bash
npm run watch
```
## 🏗️ Structure du projet
```
src/
├── components/ # Composants React Native
│ ├── Button.tsx
│ ├── Card.tsx
│ ├── Form.tsx
│ ├── Grid.tsx
│ ├── Modal.tsx
│ ├── Badge.tsx
│ ├── Alert.tsx
│ ├── Spinner.tsx
│ └── __tests__/ # Tests unitaires
├── theme/ # Système de thème
│ ├── ThemeProvider.tsx
│ └── defaultTheme.ts
└── index.ts # Point d'entrée principal
example/ # Application d'exemple
├── App.tsx
lib/ # Build output (généré)
```
## 🧪 Tests
### Lancer les tests
```bash
npm test
# Tests en mode watch
npm test -- --watch
# Tests avec coverage
npm test -- --coverage
```
### Écrire des tests
Les tests sont écrits avec Jest et React Native Testing Library. Exemple :
```tsx
import React from 'react';
import { render } from '@testing-library/react-native';
import { Button } from '../Button';
import { BootstrapProvider } from '../../theme/ThemeProvider';
const renderWithProvider = (component: React.ReactElement) => {
return render(
<BootstrapProvider>
{component}
</BootstrapProvider>
);
};
describe('Button Component', () => {
it('renders correctly', () => {
const { getByText } = renderWithProvider(
<Button>Test Button</Button>
);
expect(getByText('Test Button')).toBeTruthy();
});
});
```
## 🎨 Ajout de nouveaux composants
### 1. Créer le composant
Créez un nouveau fichier dans `src/components/` :
```tsx
import React from 'react';
import { View, ViewStyle } from 'react-native';
import { useTheme } from '../theme/ThemeProvider';
interface MonComposantProps {
children: React.ReactNode;
variant?: 'primary' | 'secondary';
style?: ViewStyle;
}
export const MonComposant: React.FC<MonComposantProps> = ({
children,
variant = 'primary',
style,
}: MonComposantProps) => {
const { theme, currentColors } = useTheme();
const componentStyles: ViewStyle = {
// Styles basés sur le thème
backgroundColor: currentColors[variant],
padding: theme.spacing[3],
borderRadius: theme.borderRadius.base,
};
return (
<View style={[componentStyles, style]}>
{children}
</View>
);
};
```
### 2. Ajouter les tests
Créez `src/components/__tests__/MonComposant.test.tsx` :
```tsx
import React from 'react';
import { render } from '@testing-library/react-native';
import { MonComposant } from '../MonComposant';
import { BootstrapProvider } from '../../theme/ThemeProvider';
// Tests...
```
### 3. Exporter le composant
Ajoutez l'export dans `src/index.ts` :
```tsx
export { MonComposant } from './components/MonComposant';
export type { MonComposantProps } from './components/MonComposant';
```
### 4. Documenter
Ajoutez la documentation dans le README.md et créez un exemple d'utilisation.
## 🎯 Standards de code
### TypeScript
- Utilisez TypeScript strict
- Définissez des interfaces pour toutes les props
- Utilisez des types génériques quand approprié
- Exportez les types pour les utilisateurs
### Style
- Utilisez le hook `useTheme` pour accéder au thème
- Préférez `ViewStyle`, `TextStyle` aux styles inline
- Utilisez `theme.spacing`, `theme.colors`, etc.
- Supportez les props `style` personnalisées
### Performance
- Utilisez `React.memo` pour les composants complexes
- Évitez les recalculs inutiles avec `useMemo`
- Utilisez `StyleSheet.create` quand possible
## 📝 Convention de nommage
- Composants : PascalCase (`Button`, `FormControl`)
- Props : camelCase (`variant`, `isDisabled`)
- Fichiers : PascalCase pour les composants (`Button.tsx`)
- Types : PascalCase avec suffixe (`ButtonProps`, `ThemeMode`)
## 🔄 Workflow Git
### Branches
- `main` : version stable
- `develop` : développement en cours
- `feature/nom-feature` : nouvelles fonctionnalités
- `fix/nom-bug` : corrections de bugs
### Commits
Utilisez des messages de commit descriptifs :
```
feat: add Dropdown component with keyboard navigation
fix: resolve Button loading state accessibility issue
docs: update installation instructions
test: add Modal component unit tests
```
### Pull Requests
1. Créez une branche depuis `develop`
2. Implémentez votre fonctionnalité avec tests
3. Vérifiez que tous les tests passent
4. Mettez à jour la documentation si nécessaire
5. Créez une PR vers `develop`
Template de PR :
```markdown
## Description
Brève description des changements
## Type de changement
- [ ] Bug fix
- [ ] Nouvelle fonctionnalité
- [ ] Breaking change
- [ ] Documentation
## Tests
- [ ] Tests unitaires ajoutés/mis à jour
- [ ] Tests manuels effectués
## Checklist
- [ ] Mon code respecte les standards du projet
- [ ] J'ai effectué une revue de mon propre code
- [ ] J'ai commenté le code complexe
- [ ] J'ai mis à jour la documentation
- [ ] Mes changements ne génèrent pas de nouveaux warnings
- [ ] J'ai ajouté des tests qui prouvent que ma correction est efficace
- [ ] Les tests nouveaux et existants passent localement
```
## 🐛 Signaler des bugs
Utilisez le template d'issue GitHub :
```markdown
**Description du bug**
Description claire et concise du problème.
**Reproduction**
Étapes pour reproduire le comportement :
1. Aller à '...'
2. Cliquer sur '....'
3. Faire défiler vers '....'
4. Voir l'erreur
**Comportement attendu**
Description de ce qui devrait se passer.
**Screenshots**
Si applicable, ajoutez des screenshots.
**Environnement:**
- OS: [e.g. iOS, Android]
- Version React Native: [e.g. 0.72.0]
- Version de la librairie: [e.g. 1.0.0]
**Contexte additionnel**
Toute autre information pertinente.
```
## 💡 Proposer des fonctionnalités
Avant d'implémenter une nouvelle fonctionnalité majeure :
1. Créez une issue de discussion
2. Décrivez le besoin et la solution proposée
3. Attendez les retours de la communauté
4. Commencez l'implémentation une fois approuvée
## 📚 Ressources
- [Bootstrap 5 Documentation](https://getbootstrap.com/docs/5.0/getting-started/introduction/)
- [React Native Documentation](https://reactnative.dev/docs/getting-started)
- [TypeScript Handbook](https://www.typescriptlang.org/docs/)
- [Testing Library React Native](https://callstack.github.io/react-native-testing-library/)
## 🤝 Code de conduite
En participant à ce projet, vous acceptez de respecter notre code de conduite. Soyez respectueux, inclusif et professionnel dans toutes vos interactions.
## ❓ Questions
Si vous avez des questions, n'hésitez pas à :
- Créer une issue GitHub
- Rejoindre les discussions
- Contacter les mainteneurs
Merci pour votre contribution ! 🎉