Simple, performant and accessible React Modal component. Migration from jQuery Modal plugin to React.
- ⚡ Performance: Lightweight component (~5KB)
- ♿ Accessibility: ARIA support, focus and keyboard management
- 🎨 Customizable: Easily modifiable CSS styles
- 📦 No dependencies: Only React as peer dependency
- 🔧 Simple: Intuitive and easy-to-use API
npm install @getsu7/react-simple-modalor with yarn:
yarn add @getsu7/react-simple-modalimport { useState } from 'react';
import Modal from '@getsu7/react-simple-modal';
function App() {
const [isOpen, setIsOpen] = useState(false);
return (
<div>
<button onClick={() => setIsOpen(true)}>
Open Modal
</button>
<Modal
isOpen={isOpen}
onClose={() => setIsOpen(false)}
>
<h2>Modal Title</h2>
<p>Your modal content here.</p>
<button onClick={() => setIsOpen(false)}>
Close
</button>
</Modal>
</div>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
isOpen |
boolean |
required | Controls the modal visibility |
onClose |
function |
required | Callback called on close |
children |
ReactNode |
required | Modal content |
className |
string |
'' |
Additional CSS class |
closeOnEscape |
boolean |
true |
Close with Escape key |
closeOnOverlayClick |
boolean |
true |
Close by clicking on overlay |
showCloseButton |
boolean |
true |
Show close button (×) |
ariaLabel |
string |
'Fenêtre modale' |
ARIA label for accessibility |
<Modal isOpen={showConfirm} onClose={() => setShowConfirm(false)}>
<h3>Confirm Action?</h3>
<p>Are you sure you want to continue?</p>
<div style={{ display: 'flex', gap: '1rem', marginTop: '1rem' }}>
<button onClick={handleConfirm}>Confirm</button>
<button onClick={() => setShowConfirm(false)}>Cancel</button>
</div>
</Modal><Modal
isOpen={isProcessing}
onClose={() => {}}
showCloseButton={false}
closeOnEscape={false}
closeOnOverlayClick={false}
>
<div style={{ textAlign: 'center' }}>
<div className="spinner" />
<p>Processing...</p>
</div>
</Modal><Modal
isOpen={isOpen}
onClose={handleClose}
className="custom-modal"
>
<h2>Custom Modal</h2>
<p>Content with custom style</p>
</Modal>Add your custom CSS:
.custom-modal {
max-width: 600px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
}The component follows accessibility best practices:
- ARIA: Uses
role="dialog"andaria-modal="true" - Focus: Automatically manages focus (focus trap)
- Keyboard: Escape key support to close
- Screen readers: Customizable ARIA labels
Contributions are welcome! Feel free to open an issue or a pull request.
Created by getsu7