Overlay dialogs with ASCII-style borders for important messages and user interactions.
Click any button to open a modal. Press ESC or click outside to close (except static).
npm install react-ascii-ui
import { AsciiModal, AsciiButton } from 'react-ascii-ui'; export default function Example() { const [isOpen, setIsOpen] = useState(false); return ( <> <AsciiButton onClick={() => setIsOpen(true)}> Open Modal </AsciiButton> <AsciiModal isOpen={isOpen} onClose={() => setIsOpen(false)} title="My Modal" > <p>Modal content goes here</p> </AsciiModal> </> ); }
<AsciiModal isOpen={isOpen} onClose={() => setIsOpen(false)} title="Basic Modal" > <p>Your content here</p> </AsciiModal>
{/* Small modal */} <AsciiModal size="sm" isOpen={isOpen} onClose={onClose}> <p>Small modal content</p> </AsciiModal> {/* Large modal */} <AsciiModal size="lg" isOpen={isOpen} onClose={onClose}> <p>Large modal with more space</p> </AsciiModal>
<AsciiModal isOpen={isOpen} onClose={() => setIsOpen(false)} backdrop="static" title="Cannot click outside to close" > <p>This modal requires explicit close action</p> </AsciiModal>
<AsciiModal isOpen={isOpen} onClose={() => setIsOpen(false)} showCloseButton={false} title="Custom Controls" > <p>Use your own close button</p> <AsciiButton onClick={() => setIsOpen(false)}> Custom Close </AsciiButton> </AsciiModal>
Prop | Type | Default | Description |
---|---|---|---|
isOpen | boolean | - | Whether the modal is visible |
onClose | () => void | - | Callback function called when modal should close |
title | string | - | Optional title displayed in modal header |
children | React.ReactNode | - | Modal body content |
size | 'sm' | 'md' | 'lg' | 'md' | Modal size variant |
showCloseButton | boolean | true | Whether to show the [X] close button |
backdrop | 'static' | 'clickable' | 'clickable' | Whether clicking outside closes the modal |
className | string | "" | Additional CSS classes for modal container |
Modal automatically handles accessibility features including focus management and ARIA attributes.