Modal Component
Flexible dialogs for alerts, data binding, and galleries
1. Dynamic Modal
Create modals programmatically using the Modal class.
// Basic Usage
const modal = new Modal({
title: 'Hello World',
content: 'This is a dynamically created modal.',
footer: '<button class="btn btn-primary modal-close">Close</button>'
});
modal.show();
// Confirmation Dialog
const confirmModal = new Modal({
title: 'Are you sure?',
content: 'Do you want to proceed with this action?',
closeButton: false, // Hide default close 'x'
backdrop: 'static' // Prevent closing by clicking backdrop
});
// Custom footer with actions
confirmModal.dialog.querySelector('.modal-body').insertAdjacentHTML('afterend', `
<div class="modal-footer">
<button class="btn text modal-close">Cancel</button>
<button class="btn btn-danger" onclick="alert('Deleted!'); this.closest('.modal').remove()">Delete</button>
</div>
`);
confirmModal.show();
2. Data Binding
Bind data from your HTML elements directly to a modal using data-modal-bind.
John Doe
Software Engineer
Jane Smith
Product Designer
User Profile
<!-- Trigger Button -->
<button class="btn" data-modal="user-modal" data-modal-bind="name:name, role:role, avatar:avatar">
View Profile
</button>
<!-- Target Modal -->
<div id="user-modal" class="modal">
...
<h2 data-modal-target="name"></h2>
<img data-modal-target="avatar" src="">
...
</div>
3. Gallery Mode
Create a navigable gallery with data-modal-gallery="true". Add transition effects using data-modal-effect.
Available Effects
Fade (Default)
Slide
Zoom
<!-- Gallery Item with Effect -->
<div class="gallery-item"
data-modal="lightbox-modal"
data-modal-bind="src:full, caption:caption"
data-modal-gallery="true"
data-modal-effect="slide"
data-full="image.jpg"
data-caption="Description">
<img src="thumb.jpg">
</div>
<!-- Lightbox Modal -->
<div class="modal modal-lightbox" id="lightbox-modal" aria-hidden="true">
<div class="modal-content">
<button class="modal-close btn-close" aria-label="Close"></button>
<div class="lightbox-body">
<img data-modal-target="src" src="" alt="">
<div class="lightbox-caption">
<h3 data-modal-target="caption"></h3>
</div>
</div>
<button class="modal-prev" data-modal-nav="prev">‹</button>
<button class="modal-next" data-modal-nav="next">›</button>
</div>
</div>
// Available effects (animates content only, not frame/buttons):
// - fade (default): Smooth opacity transition
// - slide: Slide horizontally based on direction
// - slide-horizontal: Same as slide
// - slide-vertical: Slide up/down based on direction
// - slide-left: Always slide from left
// - slide-right: Always slide from right
// - slide-up: Always slide from top
// - slide-down: Always slide from bottom
// - zoom: Scale in/out effect
// Usage:
data-modal-effect="fade"
data-modal-effect="slide"
data-modal-effect="zoom"
// Touch Support:
// - Swipe left = Next image
// - Swipe right = Previous image
// - Works on all touch devices automatically
4. Zero JavaScript
Open any modal just by referencing its ID in data-modal. No JavaScript required.
Simple Modal
This modal opens without writing a single line of JavaScript!
Just use data-modal="simple-modal" on your button.
<!-- Trigger -->
<button class="btn" data-modal="simple-modal">Open Simple Modal</button>
<!-- Modal -->
<div id="simple-modal" class="modal">
<div class="modal-dialog">
<div class="modal-header">
<h4 class="modal-title">Simple Modal</h4>
<button type="button" class="modal-close btn-close"></button>
</div>
<div class="modal-body">
<p>This modal opens without writing a single line of JavaScript!</p>
</div>
</div>
</div>