import { C as CreateChannelStateOptions, a as ChannelStateApi } from './shared/channelstate.CFFwuxVi.js';
export { d as ChannelApi, b as ChannelMessage, c as ChannelMessageReceived, e as ChannelStateCreator, f as createChannelStateImpl } from './shared/channelstate.CFFwuxVi.js';
import { Draft } from 'immer';
import { MaybePartial } from './vanilla.js';

interface CreatePrimaryChannelStateOptions extends CreateChannelStateOptions {
}

interface CreateReplicaChannelStateOptions extends CreateChannelStateOptions {
}

type SetChannelState<T> = (nextStateOrUpdater: MaybePartial<T> | ((draft: Draft<T>) => void), replace?: boolean) => void;
type UseChannelState<T> = ChannelStateApi<T> & (() => [state: T, setState: SetChannelState<T>]);
declare function create<TState extends object, TOption extends CreateChannelStateOptions>(isPrimary: boolean, channelName: string, initialState: TState, options?: TOption): UseChannelState<TState>;
declare namespace create {
    var primary: <T extends object>(channelName: string, initialState: T, options?: CreatePrimaryChannelStateOptions) => UseChannelState<T>;
    var replica: <T extends object>(channelName: string, initialState: T, options?: CreateReplicaChannelStateOptions) => UseChannelState<T>;
}

export { ChannelStateApi, CreateChannelStateOptions, type SetChannelState, type UseChannelState, create };
