The 101: open a dialog and await the answer. Confirm resolves true; dismissing resolves
undefined. Edit the code below — it runs live.
import{useState}from"react";import{createDialog,typeDialogComponentProps}from"./dialog-fn";type Input = {message: string };functionConfirmDialog({isOpen,data,onClose,onConfirm}: DialogComponentProps<Input, boolean>){return(<dialogopen={isOpen}><divclassName="panel"><h3>Are you sure?</h3><pclassName="muted">{data?.message}</p><divclassName="row"><buttononClick={onClose}>Cancel</button><buttonclassName="primary"onClick={()=>onConfirm?.(true)}>
Confirm
</button></div></div></dialog>);}// Pass the component in, get back a Dialog to render + a `show` you can call anywhere.const{Dialog,show} = createDialog(ConfirmDialog);exportdefaultfunctionApp(){const[status,setStatus] = useState("—");asyncfunctionremove(){// Resolves `true` on confirm, or `undefined` when dismissed. Never rejects.constconfirmed = awaitshow({message:"This deletes the item permanently."});setStatus(confirmed ? "✅ confirmed" : "✋ dismissed");}return(<main><buttonclassName="primary"onClick={remove}>
Delete item
</button><pclassName="muted">Result: {status}</p><Dialog/></main>);}