import * as storybook_internal_types from 'storybook/internal/types';
import { StoryIndex, PreparedStory, NormalizedStoriesSpecifier, Addon_StorySortParameterV7, StorybookConfig as StorybookConfig$1 } from 'storybook/internal/types';
import { ReactRenderer } from '@storybook/react';
export { ArgTypes, Args, Decorator, Loader, Meta, Parameters, Preview, StoryFn, StoryObj } from '@storybook/react';
import * as react_jsx_runtime from 'react/jsx-runtime';
import { StoryContext } from 'storybook/internal/csf';
import { Theme } from '@storybook/react-native-theming';
export { Theme, darkTheme, theme } from '@storybook/react-native-theming';
import { SBUI } from '@storybook/react-native-ui-common';
import { Channel } from 'storybook/internal/channels';
import { PreviewWithSelection } from 'storybook/internal/preview-api';

interface Storage {
    getItem: (key: string) => Promise<string | null>;
    setItem: (key: string, value: string) => Promise<void>;
}
type StoryKind = string;
type StoryName = string;
type InitialSelection = `${StoryKind}--${StoryName}` | {
    /**
     * Kind is the default export name or the storiesOf("name") name
     */
    kind: StoryKind;
    /**
     * Name is the named export or the .add("name") name
     */
    name: StoryName;
};
type DeepPartial<T> = T extends object ? {
    [P in keyof T]?: DeepPartial<T[P]>;
} : T;
type ThemePartial = DeepPartial<Theme>;
type Params = {
    onDeviceUI?: boolean;
    /**
     * Set as false to disable the wrapper around the story view.
     * NOTE We may remove this in the future for a better solution.
     * default: true
     */
    hasStoryWrapper?: boolean;
    /**
     * Enable websockets for the storybook server to remotely control the storybook
     * default: false
     */
    enableWebsockets?: boolean;
    query?: string;
    /** The host for the websocket server. default: localhost */
    host?: string;
    /** The port for the websocket server. default: 7007 */
    port?: number;
    secured?: boolean;
    /** The initial story */
    initialSelection?: InitialSelection;
    /** Whether to persist story selection. default: true */
    shouldPersistSelection?: boolean;
    theme: ThemePartial;
    /** Used for persisting story selection. required. */
    storage?: Storage;
    /** The custom UI component to use instead of the default UI */
    CustomUIComponent?: SBUI;
};
declare class View {
    _storyIndex: StoryIndex;
    _setStory: (story: StoryContext<ReactRenderer>) => void;
    _forceRerender: () => void;
    _ready: boolean;
    _preview: PreviewWithSelection<ReactRenderer>;
    _asyncStorageStoryId: string;
    _webUrl: string;
    _storage: Storage;
    _channel: Channel;
    _idToPrepared: Record<string, PreparedStory<ReactRenderer>>;
    constructor(preview: PreviewWithSelection<ReactRenderer>, channel: Channel);
    _storyIdExists: (storyId: string) => boolean;
    _getInitialStory: ({ initialSelection, shouldPersistSelection, }?: Partial<Params>) => Promise<{
        storySpecifier: string;
        viewMode: string;
    }>;
    _getHost: (params?: Partial<Params>) => any;
    __getPort: (params?: Partial<Params>) => any;
    _isSecureConnection: (params?: Partial<Params>) => any;
    _getServerChannel: (params?: Partial<Params>) => Channel;
    createPreparedStoryMapping: () => Promise<void>;
    getStorybookUI: (params?: Partial<Params>) => () => react_jsx_runtime.JSX.Element;
}

/** Configuration options that are needed at startup, only serialisable values are possible */
interface ReactNativeOptions {
    /**
     * Note that this is for future and play functions are not yet fully supported on native.
     */
    playFn?: boolean;
}
declare function prepareStories({ storyEntries, options, storySort, }: {
    storyEntries: (NormalizedStoriesSpecifier & {
        req: any;
    })[];
    options?: ReactNativeOptions;
    storySort?: Addon_StorySortParameterV7;
}): {
    index: {
        v: number;
        entries: Record<string, storybook_internal_types.IndexEntry>;
    };
    importMap: Record<string, any>;
};

declare const getProjectAnnotations: (view: View, annotations: any[]) => () => Promise<storybook_internal_types.NormalizedProjectAnnotations<ReactRenderer>>;
declare function start({ annotations, storyEntries, options, }: {
    storyEntries: (NormalizedStoriesSpecifier & {
        req: any;
    })[];
    annotations: any[];
    options?: ReactNativeOptions;
}): View;
declare function updateView(viewInstance: View, annotations: any[], normalizedStories: (NormalizedStoriesSpecifier & {
    req: any;
})[], options?: ReactNativeOptions): void;

declare const RN_STORYBOOK_STORAGE_KEY = "lastOpenedStory";
declare const RN_STORYBOOK_EVENTS: {
    RN_GET_INDEX: string;
    RN_GET_INDEX_RESPONSE: string;
};
declare const STORYBOOK_STORY_ID_PARAM = "STORYBOOK_STORY_ID";

interface Features {
    /** Enable the built-in on-device backgrounds addon panel. */
    ondeviceBackgrounds?: boolean;
}
interface StorybookConfig {
    stories: StorybookConfig$1['stories'];
    addons: Array<string | {
        name: string;
        options?: Record<string, any>;
    }>;
    reactNative?: ReactNativeOptions;
    features?: Features;
    framework?: '@storybook/react-native';
}

export { type Features, type InitialSelection, type Params, RN_STORYBOOK_EVENTS, RN_STORYBOOK_STORAGE_KEY, STORYBOOK_STORY_ID_PARAM, type Storage, type StorybookConfig, type ThemePartial, View, getProjectAnnotations, prepareStories, start, updateView };
