///
import { Slot } from '@revesuite/global/utils';
import type { Awareness as YAwareness } from 'y-protocols/awareness.js';
import type { Space } from './space.js';
import type { Store } from './store.js';
export interface UserRange {
startOffset: number;
endOffset: number;
blockIds: string[];
}
export interface UserInfo {
id: number;
name: string;
color: string;
}
type Request = BlockSuiteFlags, Key extends keyof Flags = keyof Flags> = {
id: string;
clientId: number;
field: Key;
value: Flags[Key];
};
type Response = {
id: string;
};
export type RawAwarenessState = BlockSuiteFlags> = {
rangeMap?: Record;
user?: UserInfo;
flags: Flags;
request?: Request[];
response?: Response[];
};
interface AwarenessEvent = BlockSuiteFlags> {
id: number;
type: 'add' | 'update' | 'remove';
state?: RawAwarenessState;
}
export declare class AwarenessStore = BlockSuiteFlags> {
readonly awareness: YAwareness>;
readonly store: Store;
readonly slots: {
update: Slot>;
};
constructor(store: Store, awareness: YAwareness>, defaultFlags: Flags);
setFlag(field: Key, value: Flags[Key]): void;
getFlag(field: Key): Flags[Key] | undefined;
setReadonly(space: Space, value: boolean): void;
isReadonly(space: Space): boolean;
setRemoteFlag(clientId: number, field: Key, value: Flags[Key]): void;
setLocalRange(space: Space, range: UserRange | null): void;
getLocalRange(space: Space): UserRange | undefined;
getStates(): Map>;
private _onAwarenessChange;
private _onAwarenessMessage;
private _handleRemoteFlags;
destroy(): void;
}
export {};
//# sourceMappingURL=awareness.d.ts.map