npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

modal-mtdev2024

v1.0.6

Published

A lightweight and accessible React modal component

Readme

Modal Component (React)

A lightweight, accessible, and reusable confirmation modal component for React applications.

Features

  • Controlled visibility (isOpen)

  • Close on:

    • Overlay click
    • Escape key press
    • Close button click
  • Optional title support

  • Fully composable content via children

  • Clean and minimal API

  • Built with React hooks (useEffect, useCallback)

  • ARIA attributes for accessibility (role="dialog", aria-modal, aria-labelledby)


Installation

npm install modal-mtdev2024

ou

yarn add modal-mtdev2024

Usage

import { useState } from "react";
import Modal from "modal-mtdev2024";
import "modal-mtdev2024/style.css";

function App() {
  const [isOpen, setIsOpen] = useState(false);

  return (
    <>
      <button onClick={() => setIsOpen(true)}>Open Modal</button>

      <Modal
        isOpen={isOpen}
        onClose={() => setIsOpen(false)}
        title="Confirmation"
      >
        <p>Example</p>
      </Modal>
    </>
  );
}

Props

| Prop | Type | Required ? | Description | | ---------- | ----------- | ---------- | ------------------------------------ | | isOpen | boolean | Yes | Controls the visibility of the modal | | onClose | function | Yes | Callback triggered when modal closes | | children | ReactNode | Yes | Content inside the modal | | title | string | No | Optional modal title |


Behavior

  • Clicking outside the modal (overlay) closes it
  • Pressing the Escape key closes it
  • Clicking inside the modal does not close it (event propagation is stopped)
  • Modal is not rendered at all when isOpen is false

Styling

The component comes with a default stylesheet. Import it in your project:

import "modal-mtdev2024/style.css";

You can override the default styles using these CSS classes:

.modal-overlay { }
.modal-content { }
.modal-title { }
.modal-close { }

Implementation Details

  • Uses useEffect to handle global keyboard events
  • Uses useCallback to prevent unnecessary re-renders
  • Cleans up event listeners properly to avoid memory leaks

Improvements to consider

  • Trap focus inside the modal
  • Manage initial focus when opening
  • Add sr-only support for screen readers

Type Documentation

Props are documented using JSDoc comments directly in the source code. No runtime type checking dependency required.


## License

MIT © MTDev2024