import { type ReactNode, type ComponentType, type ReactElement } from 'react';
import type { SlotContent } from './types';
/**
 * SlotFill Context - manages slot registrations
 */
interface SlotFillContextValue {
    fills: Map<string, SlotContent[]>;
    registerFill: (slotName: string, content: SlotContent) => void;
    unregisterFill: (slotName: string, content: SlotContent) => void;
    getSlotContent: (slotName: string) => SlotContent[];
}
/**
 * Hook to access SlotFill context
 */
export declare function useSlotFill(): SlotFillContextValue;
/**
 * SlotFillProvider - Wrap your app to enable slot/fill functionality
 */
interface SlotFillProviderProps {
    readonly children: ReactNode;
    readonly initialFills?: Record<string, SlotContent>;
}
export declare function SlotFillProvider({ children, initialFills }: SlotFillProviderProps): ReactElement;
/**
 * Slot - Renders content injected by Fill components or extensions
 */
interface SlotComponentProps {
    readonly name: string;
    readonly context?: Record<string, unknown>;
    readonly children?: ReactNode;
    readonly fallback?: ReactNode;
    readonly wrapper?: ComponentType<{
        children: ReactNode;
    }>;
}
export declare function Slot({ name, context, children, fallback, wrapper: Wrapper }: SlotComponentProps): ReactElement | null;
/**
 * Fill - Injects content into a named Slot
 */
interface FillProps {
    readonly slot: string;
    readonly children: ReactNode;
}
export declare function Fill({ slot, children }: FillProps): ReactElement | null;
/**
 * Hook to check if a slot has any content
 */
export declare function useSlotHasContent(slotName: string): boolean;
/**
 * createSlotFill - Factory to create typed Slot/Fill pairs
 */
export declare function createSlotFill<T extends Record<string, unknown> = Record<string, unknown>>(slotName: string): {
    Slot: {
        (props: Omit<SlotComponentProps, "name"> & {
            context?: T;
        }): import("react/jsx-runtime").JSX.Element;
        displayName: string;
    };
    Fill: {
        ({ children }: {
            children: ReactNode;
        }): import("react/jsx-runtime").JSX.Element;
        displayName: string;
    };
    slotName: string;
};
export {};
//# sourceMappingURL=SlotFill.d.ts.map