nqui
Components

Dialog

Modal dialog with trigger, content, header, and footer. Core Radix primitive.

Dialog

Modal dialog. Use for confirmations, forms, or focused content. Based on Radix UI Dialog.

Installation

npm install @nqlib/nqui

Import

import {
  Dialog,
  DialogTrigger,
  DialogContent,
  DialogHeader,
  DialogTitle,
  DialogDescription,
  DialogFooter,
} from '@nqlib/nqui';

Basic Usage

Copy this into your app — same pattern as the first example below.

import {
  Dialog,
  DialogTrigger,
  DialogContent,
  DialogHeader,
  DialogTitle,
  DialogDescription,
  DialogFooter,
} from '@nqlib/nqui';
import { Button } from '@nqlib/nqui';

export default function Example() {
  return (
    <Dialog>
      <DialogTrigger asChild>
        <Button>Open</Button>
      </DialogTrigger>
      <DialogContent>
        <DialogHeader>
          <DialogTitle>Title</DialogTitle>
          <DialogDescription>Description</DialogDescription>
        </DialogHeader>
        <p>Body</p>
        <DialogFooter>
          <Button variant="outline">Cancel</Button>
          <Button>Save</Button>
        </DialogFooter>
      </DialogContent>
    </Dialog>
  );
}

Examples

Each example has a Preview and Code tab. The code is copy-paste ready for your app (import from '@nqlib/nqui', same usage as above).

Basic Dialog

Modal dialog with trigger, content, header, and footer (Core Radix)

Reactexample.tsx
import {  Dialog,  DialogTrigger,  DialogContent,  DialogHeader,  DialogTitle,  DialogDescription,  DialogFooter,} from '@nqlib/nqui';import { Button } from '@nqlib/nqui';export default function Example() {  return (    <Dialog>      <DialogTrigger asChild>        <Button>Open</Button>      </DialogTrigger>      <DialogContent>        <DialogHeader>          <DialogTitle>Title</DialogTitle>          <DialogDescription>Description</DialogDescription>        </DialogHeader>        <p>Body</p>        <DialogFooter>          <Button variant="outline">Cancel</Button>          <Button>Save</Button>        </DialogFooter>      </DialogContent>    </Dialog>  );}

Controlled

Use open and onOpenChange for controlled state:

<Dialog open={open} onOpenChange={setOpen}>
  ...
</Dialog>

Props

Dialog (Root)

PropTypeDefaultDescription
openboolean-Controlled open state
defaultOpenbooleanfalseUncontrolled default open
onOpenChange(open: boolean) => void-Callback when open changes
modalbooleantrueWhether dialog is modal

DialogTrigger

PropTypeDefaultDescription
asChildbooleanfalseMerge props into child (e.g. Button)
All standard button props--Accepts HTML button attributes

DialogContent

PropTypeDefaultDescription
showCloseButtonbooleantrueShow close (X) button
onEscapeKeyDown(event: KeyboardEvent) => void-Callback for Escape key
onPointerDownOutside(event: Event) => void-Callback for outside click
classNamestring-Additional CSS classes
All standard div props--Accepts HTML div attributes

DialogFooter

PropTypeDefaultDescription
showCloseButtonbooleanfalseAdd a Close button
classNamestring-Additional CSS classes
All standard div props--Accepts HTML div attributes

DialogHeader, DialogTitle, DialogDescription

Accept standard div/h2/p props plus className.

Next Steps