{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "extends": "none",
  "name": "modal",
  "title": "modal",
  "description": "modal",
  "dependencies": [
    "react-aria-components"
  ],
  "registryDependencies": [
    "https://intentui.com/r/primitive",
    "https://intentui.com/r/dialog"
  ],
  "files": [
    {
      "path": "src/components/ui/modal.tsx",
      "content": "'use client'\n\nimport {\n  type DialogProps,\n  DialogTrigger as DialogTriggerPrimitive,\n  type DialogTriggerProps,\n} from 'react-aria-components/Dialog'\n\nimport {\n  Modal as ModalPrimitive,\n  ModalOverlay,\n  type ModalOverlayProps,\n} from 'react-aria-components/Modal'\nimport { cx } from '@/lib/primitive'\nimport {\n  Dialog,\n  DialogBody,\n  DialogClose,\n  DialogCloseIcon,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from './dialog'\n\nconst Modal = (props: DialogTriggerProps) => {\n  return <DialogTriggerPrimitive {...props} />\n}\n\nconst sizes = {\n  '2xs': 'sm:max-w-2xs',\n  xs: 'sm:max-w-xs',\n  sm: 'sm:max-w-sm',\n  md: 'sm:max-w-md',\n  lg: 'sm:max-w-lg',\n  xl: 'sm:max-w-xl',\n  '2xl': 'sm:max-w-2xl',\n  '3xl': 'sm:max-w-3xl',\n  '4xl': 'sm:max-w-4xl',\n  '5xl': 'sm:max-w-5xl',\n  fullscreen: '',\n}\n\ninterface ModalContentProps\n  extends\n    Omit<ModalOverlayProps, 'children'>,\n    Pick<DialogProps, 'aria-label' | 'aria-labelledby' | 'role' | 'children'> {\n  size?: keyof typeof sizes\n  closeButton?: boolean\n  overlay?: Pick<ModalOverlayProps, 'className'>\n}\n\nconst ModalContent = ({\n  className,\n  isDismissable: isDismissableInternal,\n  children,\n  overlay,\n  size = 'md',\n  role = 'dialog',\n  closeButton = true,\n  ...props\n}: ModalContentProps) => {\n  const isDismissable = isDismissableInternal ?? role !== 'alertdialog'\n  return (\n    <ModalOverlay\n      data-slot=\"modal-overlay\"\n      isDismissable={isDismissable}\n      className={cx(\n        'fixed start-0 top-0 z-50 h-(--visual-viewport-height,100vh) w-screen',\n        'bg-bg/15 backdrop-blur-[1px] motion-reduce:backdrop-blur-none',\n        'grid grid-rows-[1fr_auto] justify-items-center sm:grid-rows-[1fr_auto_3fr]',\n        'entering:fade-in entering:animate-in entering:duration-300 entering:ease-out',\n        'exiting:fade-out exiting:animate-out exiting:ease-in',\n        size === 'fullscreen' ? 'md:p-3' : 'md:p-4',\n        overlay?.className\n      )}\n      {...props}\n    >\n      <ModalPrimitive\n        data-slot=\"modal-content\"\n        className={cx(\n          'row-start-2 w-full text-start align-middle',\n          '[--visual-viewport-vertical-padding:16px]',\n          size === 'fullscreen'\n            ? '**:data-[slot=dialog-body]:min-h-[calc(var(--visual-viewport-height)-var(--visual-viewport-vertical-padding)-var(--dialog-header-height)-var(--dialog-footer-height))] sm:[--visual-viewport-vertical-padding:16px]'\n            : 'sm:[--visual-viewport-vertical-padding:32px]',\n          'relative overflow-hidden bg-overlay text-overlay-fg',\n          'inset-shadow-xs rounded-t-2xl ring ring-muted-fg/25 drop-shadow-xl sm:rounded-2xl dark:ring-border',\n          sizes[size],\n          'entering:slide-in-from-bottom sm:entering:zoom-in-95 sm:entering:slide-in-from-bottom-0 entering:animate-in entering:duration-300 entering:ease-out',\n          'exiting:slide-out-to-bottom sm:exiting:zoom-out-95 sm:exiting:slide-out-to-bottom-0 exiting:animate-out exiting:ease-in',\n          className\n        )}\n      >\n        <Dialog role={role}>\n          {(values) => (\n            <>\n              {typeof children === 'function' ? children(values) : children}\n              {closeButton && <DialogCloseIcon isDismissable={isDismissable} />}\n            </>\n          )}\n        </Dialog>\n      </ModalPrimitive>\n    </ModalOverlay>\n  )\n}\n\nconst ModalTrigger = DialogTrigger\nconst ModalHeader = DialogHeader\nconst ModalTitle = DialogTitle\nconst ModalDescription = DialogDescription\nconst ModalFooter = DialogFooter\nconst ModalBody = DialogBody\nconst ModalClose = DialogClose\n\nexport {\n  Modal,\n  ModalBody,\n  ModalClose,\n  ModalContent,\n  ModalDescription,\n  ModalFooter,\n  ModalHeader,\n  ModalTitle,\n  ModalTrigger,\n}\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}