import { MergeEvents, MockedRoomEvents, PluvClient, PluvRoomAddon, PluvRoomDebug, PluvRouter, PluvRouterEventConfig, UserInfo, WebSocketConnection } from "@pluv/client"; import { Dispatch, FC, ReactNode } from "react"; import { AbstractCrdtDocFactory, InferCrdtJson, InferDoc, InferInitialStorageFn, InferStorage } from "@pluv/crdt"; import { CrdtDocLike, IOEventMessage, IOLike, Id, InferIOCrdtKind, InferIOInput, InferIOOutput, JsonObject, MaybePromise, RoomLike, UpdateMyPresenceAction } from "@pluv/types"; //#region src/types.d.ts interface PluvProviderProps { children?: ReactNode; } type BaseRoomProviderProps, TCrdt extends AbstractCrdtDocFactory> = { children?: ReactNode; initialStorage?: keyof InferStorage extends never ? never : InferInitialStorageFn; room: string; } & (keyof TPresence extends never ? { initialPresence?: never; } : { initialPresence: TPresence; }); type MockedRoomProviderProps, TCrdt extends AbstractCrdtDocFactory, TEvents extends PluvRouterEventConfig> = {}> = BaseRoomProviderProps & { events?: MockedRoomEvents>; }; type BroadcastProxy = (>(event: TEvent, data: Id[TEvent]>) => void) & { [event in keyof InferIOInput]: (input: Id[event]>) => void; }; type EventProxy = { [event in keyof InferIOOutput]: { useEvent: (callback: (data: Id>) => void) => void; }; }; type MetadataGetter = TMetadata | (() => MaybePromise); type PluvRoomProviderProps, TMetadata extends JsonObject, TPresence extends Record, TCrdt extends AbstractCrdtDocFactory> = BaseRoomProviderProps & { connect?: boolean; debug?: boolean | PluvRoomDebug; onAuthorizationFail?: (error: Error) => void; } & (keyof TMetadata extends never ? { metadata?: undefined; } : { metadata: MetadataGetter; }); interface SubscriptionHookOptions { isEqual?: (a: T, b: T) => boolean; } interface CreateBundle, TMetadata extends JsonObject, TPresence extends Record = {}, TCrdt extends InferIOCrdtKind = InferIOCrdtKind, TEvents extends PluvRouterEventConfig> = {}> { MockedRoomProvider: FC>; PluvProvider: FC; PluvRoomProvider: FC>; event: EventProxy>; useBroadcast: () => BroadcastProxy>; useCanRedo: () => boolean; useCanUndo: () => boolean; useClient: () => PluvClient; useConnection: (selector?: (connection: WebSocketConnection) => T, options?: SubscriptionHookOptions>) => Id; useDoc: () => CrdtDocLike, InferStorage>; useEvent: >>(type: TType, callback: (data: Id, TType>>) => void) => void; useMyPresence: (selector?: (myPresence: TPresence) => T, options?: SubscriptionHookOptions | null>) => [myPresence: Id, updateMyPresence: Dispatch>]; useMyself: >(selector?: (myself: Id>) => T, options?: SubscriptionHookOptions | null>) => Id | null; useOther: >(connectionId: string, selector?: (other: UserInfo) => T, options?: SubscriptionHookOptions) => T | null; useOthers: []>(selector?: (other: readonly Id>[]) => T, options?: SubscriptionHookOptions) => T; useRedo: () => () => void; useRoom: () => RoomLike, TPresence, InferStorage, TEvents>; useStorage: , TData extends unknown = InferCrdtJson[TKey]>>(key: TKey, selector?: (data: InferCrdtJson[TKey]>) => TData, options?: SubscriptionHookOptions) => [data: TData | null, sharedType: InferStorage[TKey] | null]; useTransact: () => (fn: (storage: InferStorage) => void, origin?: string) => void; useUndo: () => () => void; } type InferBundleRoom> = TBundle extends CreateBundle ? RoomLike, IPresence, InferStorage, IEvents> : never; //#endregion //#region src/createBundle.d.ts type CreateBundleOptions, TMetadata extends JsonObject = {}, TPresence extends Record = {}, TCrdt extends InferIOCrdtKind = InferIOCrdtKind, TEvents extends PluvRouterEventConfig> = {}> = { addons?: readonly PluvRoomAddon[]; router?: PluvRouter, TEvents>; }; declare const createBundle: , TMetadata extends JsonObject = {}, TPresence extends Record = {}, TCrdt extends InferIOCrdtKind = InferIOCrdtKind, TEvents extends PluvRouterEventConfig> = {}>(client: PluvClient, options?: CreateBundleOptions) => CreateBundle; //#endregion export { type CreateBundle, type EventProxy, type InferBundleRoom, type PluvProviderProps, type PluvRoomProviderProps, type SubscriptionHookOptions, createBundle }; //# sourceMappingURL=index.d.mts.map