import * as React from 'react'; import { cn } from '@workspace/ui/lib/utils'; const DEFAULT_COMPONENT = 'div'; type LiquidGlassProps = { as?: T; radius?: number; blur?: number; childClassName?: string; } & React.ComponentProps; function LiquidGlass({ as, children, className, radius = 25, blur = 0, childClassName, ref, ...props }: LiquidGlassProps) { const Component = as || DEFAULT_COMPONENT; const containerRef = React.useRef(null); React.useImperativeHandle(ref, () => containerRef.current as HTMLDivElement); const rx = radius; const [size, setSize] = React.useState<{ width: string; height: string }>({ width: '0', height: '0', }); const viewBox = React.useMemo( () => `0 0 ${size.width} ${size.height}`, [size.width, size.height], ); const calculateSize = React.useCallback(() => { if (containerRef.current) { const rect = containerRef.current.getBoundingClientRect(); setSize({ width: rect.width.toString(), height: rect.height.toString(), }); } }, []); React.useEffect(() => { calculateSize(); }, [calculateSize, children, className, childClassName, radius]); return ( {children} ); } LiquidGlass.displayName = 'LiquidGlass'; export { LiquidGlass, type LiquidGlassProps };