import React from 'react';
import type { DiningCatalogPayload, DiningCatalogItem, DiningSceneStatePayload, DiningMenuUIPayload, DiningErrorPayload, CompassSide, DisplaySide, SideSeatAssignmentPayload } from '../types/dining-iframe-types.js';
import type { ConfiguratorState, Selection } from './ov25-ui-context.js';
import type { DiningCallbacksConfig, DiningCommercePayload, DiningDisplayMode, DiningStyleImagesConfig } from '../types/dining-inject-config.js';
import type { UnifiedPricePayload, UnifiedSkuPayload } from '../types/inject-config.js';
export type DiningStep = 'style' | 'table' | 'chairs' | 'review';
export type DiningBuilderMode = 'full-range' | 'mix-and-match';
export interface DiningUIContextType {
    shadowDOMs?: {
        sidebar?: ShadowRoot;
        fullPage?: ShadowRoot;
        controls?: ShadowRoot;
    };
    cssString?: string;
    displayMode: DiningDisplayMode;
    logoURL?: string;
    mobileLogoURL?: string;
    styleImages?: DiningStyleImagesConfig;
    hideLogo: boolean;
    hidePricing: boolean;
    disableAddToCart: boolean;
    hideAr: boolean;
    catalog: DiningCatalogPayload | null;
    tables: DiningCatalogItem[];
    chairs: DiningCatalogItem[];
    benches: DiningCatalogItem[];
    sceneState: DiningSceneStatePayload | null;
    selectedTableItem: DiningCatalogItem | null;
    globalChairCount: number;
    sideAssignments: Partial<Record<CompassSide, SideSeatAssignmentPayload>>;
    uniqueChairSides: DisplaySide[];
    selectedObject: string | null;
    selectedAttachmentPoint: {
        tableId: number;
        side: CompassSide;
        index: number;
    } | null;
    loading: Record<string, boolean>;
    isAnyLoading: boolean;
    isReady: boolean;
    menuUI: DiningMenuUIPayload | null;
    lastError: DiningErrorPayload | null;
    commerceSkuSnapshot: UnifiedSkuPayload | null;
    commercePriceSnapshot: UnifiedPricePayload | null;
    diningCommercePayload: DiningCommercePayload;
    activeStep: DiningStep;
    setActiveStep: (step: DiningStep) => void;
    steps: DiningStep[];
    builderMode: DiningBuilderMode;
    setBuilderMode: (mode: DiningBuilderMode) => void;
    canAdvance: boolean;
    nextStep: () => void;
    prevStep: () => void;
    configuratorState: ConfiguratorState | undefined;
    setConfiguratorState: React.Dispatch<React.SetStateAction<ConfiguratorState | undefined>>;
    selectTable: (item: DiningCatalogItem) => void;
    setChairCount: (count: number) => void;
    setManualSideCounts: (tableConfigId: number, sides: Partial<Record<CompassSide, number>>) => void;
    toggleUniqueSide: (side: DisplaySide) => void;
    selectAttachmentPoint: (tableId: number, side: CompassSide, index: number) => void;
    clearPicking: () => void;
    selectSeatProduct: (item: DiningCatalogItem, side?: CompassSide) => void;
    selectObject: (path: string) => void;
    closeModuleMenu: () => void;
    viewInRoom: () => void;
    toggleDimensions: () => void;
    enlargeViewer: () => void;
    addToBasket: () => void;
    handleSelectionSelect: (selection: Selection, optionId?: string) => void;
    iframeRef: React.RefObject<HTMLIFrameElement>;
    isMobile: boolean;
    uniqueId?: string;
}
export declare function useDiningUI(): DiningUIContextType;
interface DiningUIProviderProps {
    children: React.ReactNode;
    uniqueId?: string;
    cssString?: string;
    forceMobile?: boolean;
    displayMode?: DiningDisplayMode;
    includeStyleStep?: boolean;
    callbacks?: DiningCallbacksConfig;
    logoURL?: string;
    mobileLogoURL?: string;
    styleImages?: DiningStyleImagesConfig;
    hideLogo?: boolean;
    hidePricing?: boolean;
    disableAddToCart?: boolean;
    hideAr?: boolean;
    currencySymbol?: string;
    shadowDOMs?: {
        sidebar?: ShadowRoot;
        fullPage?: ShadowRoot;
        controls?: ShadowRoot;
    };
}
export declare const DiningUIProvider: React.FC<DiningUIProviderProps>;
export {};
