
Security News
Axios Maintainer Confirms Social Engineering Attack Behind npm Compromise
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.
@slithy/modal-spring
Advanced tools
Animated modal adapter for @slithy/modal-kit, built on react-spring and @use-gesture/react.
Provides animated enter/leave transitions, an animated backdrop, and drag-to-close gesture support.
pnpm add @slithy/modal-core @slithy/modal-kit @slithy/modal-spring
pnpm add "@react-spring/web@>=9 <10" @use-gesture/react
@react-spring/web (v9.x) and @use-gesture/react are peer dependencies. react-spring v10 is not yet supported.
import { LayerProvider, LayerStackPriority } from '@slithy/layers'
import { Portal } from '@slithy/portal'
import { ModalRenderer } from '@slithy/modal-spring'
export function App() {
return (
<LayerProvider id="app" zIndex={LayerStackPriority.Base}>
<main>{/* your app */}</main>
<ModalRenderer
renderLayer={(children) => (
<LayerProvider id="modal" zIndex={LayerStackPriority.Modal}>
{children}
</LayerProvider>
)}
renderPortal={(children) => <Portal>{children}</Portal>}
/>
</LayerProvider>
)
}
renderLayer and renderPortal are optional — omit them if you don't use @slithy/layers or @slithy/portal.
import { useModalStore } from '@slithy/modal-core'
import { Modal } from '@slithy/modal-spring'
function MyButton() {
const open = (event: React.MouseEvent) => {
useModalStore.getState().openModal(
<Modal aria-label="My Modal">
<p>Content</p>
</Modal>,
{ triggerEvent: event }
)
}
return <button onClick={open}>Open</button>
}
| Prop | Type | Default | Description |
|---|---|---|---|
aria-label | string | — | Accessible name for the dialog |
alignX | 'center' | 'left' | 'right' | 'center' | Horizontal position |
alignY | 'middle' | 'top' | 'bottom' | 'middle' | Vertical position |
dismissible | boolean | true | Allow Escape and backdrop-click to close |
contentClassName | string | — | Class on the <dialog> element |
contentStyle | CSSProperties | — | Static styles on the <dialog> element |
contentTransitions | { from, enter, leave } | — | Spring transition values |
disableOpacityTransition | boolean | — | Skip the default opacity fade |
dragDirection | DragDirection | — | Enable drag-to-close |
containerScrolling | boolean | true | Allow container scroll |
layerIsActive | boolean | true | Pass from useLayerState for layer coordination |
springConfig | SpringConfig | — | Override the default spring config |
afterOpen | () => void | — | Fires after enter animation completes |
afterClose | () => void | — | Fires after modal is removed |
| Export | Description |
|---|---|
Modal | Animated modal component |
ModalProps | — |
ModalRenderer | Renders all open modals with animated backdrop |
ModalBackdrop | Animated backdrop (used by ModalRenderer) |
DragHandle | Drag-to-close gesture wrapper |
useModalDrag | Low-level drag hook |
useModalDragging | Internal drag spring hook |
defaultSpring | Default spring config |
iosSheetSpring | iOS-feel spring config |
DragDirection | 'up' | 'down' | 'left' | 'right' |
DragStyles | Spring transform values from drag |
FAQs
React Spring animation adapter for @slithy/modal-kit.
We found that @slithy/modal-spring demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

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.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.