
Product
Socket MCP Adds Org Alerts, Threat Feed Review, and Package Inspection
Socket MCP now lets AI assistants review org alerts, investigate threats using the Socket threat feed, and inspect package files in addition to dependency scoring.
react-motion-modal
Advanced tools
[](https://www.npmjs.com/package/react-motion-modal) [](https://www.npmjs.com/package/react-motion-modal) [ into each modal propsnpm install react-motion-modal motion zustand
or with yarn:
yarn add react-motion-modal motion zustand
react and react-dom are expected to already exist in your app.
Import the package stylesheet once in your app entry:
import 'react-motion-modal/style.css';
Create a modal.d.ts file in your project (make sure to include it in tsconfig.json):
import type { ModalDefinition } from 'react-motion-modal';
declare module 'react-motion-modal' {
interface ModalDefinition {
AlertModal: {
title: string;
};
ConfirmModal: {
onConfirm: () => void;
};
}
}
Import to define your modals
import { ModalProvider } from 'react-motion-modal';
export const App = () => {
return (
<div>
{/* rest of your app */}
<ModalProvider
modals={{
AlertModal,
ConfirmModal,
}}
/>
</div>
);
};
import { MODAL_POSITIONS, modalStore } from 'react-motion-modal';
const { openModal } = modalStore();
openModal('ConfirmModal', {
title: 'Are you sure you want to delete?',
position: MODAL_POSITIONS.RIGHT,
closeOnClickOutside: true,
});
closeModal inside your modal componentimport type { ModalParams } from 'react-motion-modal';
const ConfirmModal = ({ title, closeModal }: ModalParams<'ConfirmModal'>) => (
<div>
<h1>{title}</h1>
<button onClick={closeModal}>Close</button>
</div>
);
openModal(name, params)Opens a modal by name. The params will be inferred based on modal type.
closeModal(name?)name is provided, closes that specific modal.BaseModalParamsEach modal automatically receives the following props:
| Prop | Type | Description |
|---|---|---|
closeModal | () => void | Close function for the modal |
onClose | () => void | Callback triggered when modal is closed |
closeOnClickOutside | boolean | Close modal when clicking outside |
closeOnPressEsc | boolean | Close modal when Escape key is pressed |
position | string | Modal placement. Unknown values fall back to center. |
backdrop | { className?: string; style?: CSSProperties; } | Customize the backdrop layer |
body | { className?: string; style?: CSSProperties; } | Customize the modal body wrapper |
animate | { animate?: TargetAndTransition; exit?: TargetAndTransition; } | Animation powered by Framer Motion. Custom animation disables defaults. |
blur | boolean | Apply backdrop blur |
MODAL_POSITIONSMODAL_POSITIONS.TOP;
MODAL_POSITIONS.TOP_LEFT;
MODAL_POSITIONS.TOP_RIGHT;
MODAL_POSITIONS.TOP_CENTER;
MODAL_POSITIONS.LEFT;
MODAL_POSITIONS.RIGHT;
MODAL_POSITIONS.CENTER;
MODAL_POSITIONS.CENTER_FULL;
MODAL_POSITIONS.BOTTOM;
MODAL_POSITIONS.BOTTOM_LEFT;
MODAL_POSITIONS.BOTTOM_RIGHT;
MODAL_POSITIONS.BOTTOM_CENTER;
Default body animation follows the position. For example, left slides in from the left, right slides in from the right, top slides down, and bottom slides up.
.github/workflows/ci.yml on pushes and pull requests..github/workflows/publish.yml and uses npm publish --provenance --access public.ModalRenderer to dynamically render modals from modals stateMade with ❤️ by react-motion-modal.
FAQs
[](https://www.npmjs.com/package/react-motion-modal) [](https://www.npmjs.com/package/react-motion-modal) [
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket MCP now lets AI assistants review org alerts, investigate threats using the Socket threat feed, and inspect package files in addition to dependency scoring.

Product
Socket Firewall blocks malicious VS Code and Open VSX extensions before install, protecting developers from compromised editor marketplaces.

Research
More than 140 Mastra npm packages were compromised in a supply chain attack that used a typosquatted dependency to deliver a cross-platform infostealer during installation.