mirror of
https://github.com/langgenius/dify.git
synced 2026-05-03 17:08:03 +08:00
62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
'use client'
|
|
|
|
import type { ComponentType, FC, ReactNode, SVGProps } from 'react'
|
|
import { Dialog, DialogContent, DialogTitle } from '@/app/components/base/ui/dialog'
|
|
import { cn } from '@/utils/classnames'
|
|
import styles from './style.module.css'
|
|
|
|
type Props = {
|
|
Icon?: ComponentType<SVGProps<SVGSVGElement>>
|
|
title: string
|
|
description: string
|
|
extraInfo?: ReactNode
|
|
footer?: ReactNode
|
|
show: boolean
|
|
}
|
|
|
|
const UpgradeModalBase: FC<Props> = ({
|
|
Icon,
|
|
title,
|
|
description,
|
|
extraInfo,
|
|
footer,
|
|
show,
|
|
}) => {
|
|
return (
|
|
<Dialog open={show} disablePointerDismissal>
|
|
<DialogContent className={cn(styles.surface, 'w-[580px] rounded-2xl !p-0')}>
|
|
<div className="relative">
|
|
<div
|
|
aria-hidden
|
|
className={`${styles.heroOverlay} pointer-events-none absolute inset-0`}
|
|
/>
|
|
<div className="px-8 pt-8">
|
|
{Icon && (
|
|
<div className={`${styles.icon} flex size-12 items-center justify-center rounded-xl shadow-lg backdrop-blur-[5px]`}>
|
|
<Icon className="size-6 text-text-primary-on-surface" />
|
|
</div>
|
|
)}
|
|
<div className="mt-6 space-y-2">
|
|
<DialogTitle className={cn(styles.highlight, 'title-3xl-semi-bold')}>
|
|
{title}
|
|
</DialogTitle>
|
|
<div className="text-text-tertiary system-md-regular">
|
|
{description}
|
|
</div>
|
|
</div>
|
|
{extraInfo}
|
|
</div>
|
|
</div>
|
|
|
|
{!!footer && (
|
|
<div className="mb-8 mt-10 flex justify-end space-x-2 px-8">
|
|
{footer}
|
|
</div>
|
|
)}
|
|
</DialogContent>
|
|
</Dialog>
|
|
)
|
|
}
|
|
|
|
export default UpgradeModalBase
|