import { ReactNode } from "react";
interface ContentLoadingContainerProps {
/**
* Whether the content is currently loading
*/
isLoading: boolean;
/**
* The actual content to display when not loading
*/
children: ReactNode;
/**
* The skeleton component to show during loading
*/
skeletonComponent: ReactNode;
/**
* Additional CSS classes
*/
className?: string;
/**
* Minimum height to prevent layout jumps
*/
minHeight?: string;
/**
* Loading overlay opacity (0-1)
*/
loadingOpacity?: number;
/**
* Transition duration in milliseconds
*/
transitionDuration?: number;
}
/**
* ContentLoadingContainer
*
* A unified loading container that wraps card grids and manages loading states
* while keeping UI controls persistent. This component:
*
* - Shows skeleton loading only in content area
* - Maintains consistent layout dimensions during loading
* - Provides smooth transitions between loading and loaded states
* - Prevents layout jumps by preserving container height
* - Supports customizable skeleton components for different content types
*
* Usage:
* ```tsx
* }
* minHeight="min-h-[800px]"
* >
*
*
* ```
*/
export declare function ContentLoadingContainer({ isLoading, children, skeletonComponent, className, minHeight, loadingOpacity, transitionDuration, }: ContentLoadingContainerProps): import("react").JSX.Element;
/**
* Hook for managing content loading states with common patterns
*/
export declare function useContentLoading(isLoading: boolean): {
containerProps: {
'aria-busy': boolean;
'data-loading': boolean;
};
getSkeletonCount: (contentType: "vendor" | "blog") => 12 | 6;
getMinHeight: (contentType: "vendor" | "blog") => "min-h-[300px] md:min-h-[800px]" | "min-h-[400px] md:min-h-[900px]";
};
export {};
//# sourceMappingURL=content-loading-container.d.ts.map