Skip to main content

React Dialog Hub

A headless, lightweight, and type-safe hub for orchestrating dialogs in React. Works with any UI library (MUI, Radix, or custom). Includes built-in adapters for quick setup.

Features

  • Trigger dialogs via function calls and await a Promise result
  • UI-agnostic (headless): reuse your existing dialog components
  • Type-safe props and results with TypeScript
  • Built-in adapters for Native HTML dialogs and Material-UI

Installation

pnpm add react-dialog-hub

Optional: For MUI Adapter

pnpm add @mui/material @emotion/react @emotion/styled

Built-in Adapters

Get started quickly with pre-built dialog components:

import { AlertDialog, ConfirmDialog, PromptDialog } from 'react-dialog-hub/native';
// or
import { AlertDialog, ConfirmDialog, PromptDialog } from 'react-dialog-hub/mui';
// or
import { AlertDialog, ConfirmDialog, PromptDialog } from 'react-dialog-hub/radix';

const { show } = useDialogs();
await show(AlertDialog, { content: 'Hello!' });
const ok = await show(ConfirmDialog, { content: 'Proceed?' });

See the Examples section for detailed usage of each adapter.

Quickstart (Custom Dialogs)

  1. Place DialogsProvider at the app root
  2. Call show() from useDialogs() to display any dialog component
import { DialogsProvider, useDialogs } from 'react-dialog-hub';

function AppRoot() {
return (
<DialogsProvider>
<App />
</DialogsProvider>
);
}

function Example() {
const { show } = useDialogs();
const onClick = async () => {
const result = await show(MyConfirmDialog, { message: 'Proceed?' });
console.log(result);
};
return <button onClick={onClick}>Open</button>;
}

See the guides in the left sidebar or the API reference for details.