diff --git a/packages/ui/src/components/index.ts b/packages/ui/src/components/index.ts index 4ee3b1d700..1ca6d13c9c 100644 --- a/packages/ui/src/components/index.ts +++ b/packages/ui/src/components/index.ts @@ -87,6 +87,8 @@ export { HelpTooltip, type IconTooltipProps, InfoTooltip, WarnTooltip } from './ export { default as ImageToolButton } from './interactive/ImageToolButton' // Sortable export { Sortable } from './interactive/Sortable' +// BlockingOverlay +export { BlockingOverlay } from './interactive/BlockingOverlay' // Composite Components (复合组件) // 暂无复合组件 diff --git a/packages/ui/src/components/interactive/BlockingOverlay/index.tsx b/packages/ui/src/components/interactive/BlockingOverlay/index.tsx new file mode 100644 index 0000000000..aaddf48f88 --- /dev/null +++ b/packages/ui/src/components/interactive/BlockingOverlay/index.tsx @@ -0,0 +1,43 @@ +import { cn } from '@heroui/react' +import type { ReactNode } from 'react' +import React, { useCallback } from 'react' + +// 定义组件的 props 类型 +interface BlockingOverlayProps { + isVisible: boolean + onClick?: () => void + children?: ReactNode + className?: string +} + +export const BlockingOverlay = ({ isVisible, onClick, children, className }: BlockingOverlayProps) => { + const handleClick = useCallback( + (event: React.MouseEvent) => { + event.stopPropagation() + event.preventDefault() + if (onClick) { + onClick() + } + }, + [onClick] + ) + + if (!isVisible) { + return null + } + + return ( +
+ {children} +
+ ) +}