shadimage
quiz-ui
componentquiz-dialogsource: ok · hit

QuizDialog

Modal-embedded funnel wrapper, on Radix Dialog.

npx shadcn add "https://quiz-ui-phi.vercel.app/r/quiz-dialog.json"
free

Visual style

playful

Interaction

modal

Tags auto-generated by rules on 9/24/2026 — empty means no evidence, not lack of support.

Dependencies

Bundle weight · light
ui-primitives@radix-ui/react-dialog

Registry dependencies

@quiz-ui/quiz-cn

Files1 · source cached 10/8/2026, 5:59:12 PM

components/ui/quiz/quiz-dialog.tsx
"use client";

import * as React from "react";
import * as DialogPrimitive from "@radix-ui/react-dialog";

export interface QuizDialogProps
  extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Root> {
  trigger?: React.ReactNode;
  children: React.ReactNode;
  /** Applied to Dialog.Content. */
  className?: string;
  /** Applied to Dialog.Overlay. */
  overlayClassName?: string;
  closeButtonClassName?: string;
  closeButtonLabel?: React.ReactNode;
}

/**
 * Fixed/centered positioning on the overlay and content is kept as a
 * functional default — without it this isn't a modal, just an
 * unpositioned block in the DOM. Everything else (color, shadow,
 * radius, close-button glyph) is yours via className.
 */
export function QuizDialog({
  trigger,
  children,
  className,
  overlayClassName,
  closeButtonClassName,
  closeButtonLabel = "✕",
  ...props
}: QuizDialogProps) {
  return (
    <DialogPrimitive.Root {...props}>
      {trigger ? <DialogPrimitive.Trigger asChild>{trigger}</DialogPrimitive.Trigger> : null}
      <DialogPrimitive.Portal>
        <DialogPrimitive.Overlay className={`fixed inset-0 z-50 ${overlayClassName ?? ""}`} />
        <DialogPrimitive.Content
          className={`fixed left-1/2 top-1/2 z-50 -translate-x-1/2 -translate-y-1/2 ${className ?? ""}`}
        >
          {children}
          <DialogPrimitive.Close className={closeButtonClassName} aria-label="Close">
            {closeButtonLabel}
          </DialogPrimitive.Close>
        </DialogPrimitive.Content>
      </DialogPrimitive.Portal>
    </DialogPrimitive.Root>
  );
}

More from quiz-ui

Browse all components in this library →