A basic web component for creating modals.
The package can be found here: https://jsr.io/@nidhugg/modal
npx jsr add @nidhugg/modal
yarn dlx jsr add @nidhugg/modal
- Include the script in your HTML file by importing the
nidhugg-modal.js
file.- Note: The js file is not minified, so ideally you should minify it and add it to your bundle before using it in production.
- Add the
nidhugg-modal
element to your HTML file. - Add content to the modal using the
header
,content
, andfooter
slots.
<nidhugg-modal id="modal-1">
<h2 slot="header">Hello World</h2>
<p slot="content">This is a test of the Nidhugg Modal</p>
<button slot="footer" onclick="document.getElementById('modal-1').close()">Close</button>
</nidhugg-modal>
The modal can be styled using CSS custom variables. The following variables are available:
:root {
--nidhugg-base-100: #2a303c;
--nidhugg-base-200: #242933;
--nidhugg-base-300: #20252e;
--nidhugg-base-content: #fefefe;
--nidhugg-neutral: #1c212b;
--nidhugg-neutral-content: #fefefe;
--nidhugg-rounded: 0.5rem;
}
Slot content will be styled by the stylesheet on the website.
The modal will also add the nidhugg-modal-open
-class to the body when it is open.
/* Example: */
.nidhugg-modal-open {
overflow: hidden;
filter: blur(2px);
height: 100vh;
width: 100vw;
}
open
: Opens the modal when the attribute is present.
<nidhugg-modal id="modal-1" open>
<h2 slot="header">Hello World</h2>
<p slot="content">This is a test of the Nidhugg Modal</p>
<button slot="footer" onclick="document.getElementById('modal-1').close()">Close</button>
</nidhugg-modal>
The modal has three methods, two inherited from the Modal element:
showModal()
: Opens the modalclose()
: Closes the modal
I also added a open()
-method that can be used to open the modal.
//Open, no difference between the methods
document.getElementById("modal-1").open();
document.getElementById("modal-1").showModal();
//Close
document.getElementById("modal-1").close();
The open
-event is fired when the modal is opened.
document.getElementById("modal-1").addEventListener("open", () => {
console.log("Modal opened");
});
The close
-event is fired when the modal is closed.
document.getElementById("modal-1").addEventListener("close", () => {
console.log("Modal closed");
});
The cancel
-event is fired when the modal is closed by pressing the escape key. It is followed by the close
-event.
document.getElementById("modal-1").addEventListener("cancel", () => {
console.log("Modal canceled");
});