import { type UserManager } from "@netless/forge-room";
import EventEmitter from "eventemitter3";
import * as Y from "yjs";
export declare enum ForgeSlidePermissionFlag {
    /**
     * 没有任何权限, 只能同步他人的操作
     */
    none = 0,
    /**
     * 可以操作上一步下一步动画
     */
    changeStep = 1,
    /**
     * 可以切面页码
     */
    changePage = 2,
    /**
     * 可以触发点击动画
     */
    clickAnim = 4,
    /**
     * 拥有所有权限
     */
    all = 7
}
export interface ForgeSlidePermissionEvents {
    /**
     * 当用户权限变更时触发
     * @param { string } userId 对应 userId
     * @param { ForgeSlidePermissionFlag[] } flags 当前权限列表
     * @param { number } value 权限值
     */
    change: (userId: string, flags: ForgeSlidePermissionFlag[], value: number) => void;
}
export declare class ForgeSlidePermissions extends EventEmitter<ForgeSlidePermissionEvents> {
    private requestUserMap;
    private userManager;
    private observers;
    constructor(userManager: UserManager, requestUserMap: (userId: string) => Y.Map<any>);
    private handleUserLeave;
    private handleUserJoin;
    private addObserve;
    private createModel;
    private handleUserPermissionChange;
    /**
     * 解析权限列表组合
     * @param {number} value - 权限数字值
     * @return {WhiteboardPermissionFlag[]} - 权限列表
     */
    resolveFlags(value: number): ForgeSlidePermissionFlag[];
    /**
     * 获取权限列表组合对应的数值
     * @param { string } userId 不传表示获取自己
     */
    getPermissionValue(userId?: string): number;
    /**
     * 获取权限列表
     * @param {string=} userId 可选, 不传表示获取自己
     */
    getPermissionFlags(userId?: string): ForgeSlidePermissionFlag[];
    /**
     * 返回对应 userId 是否有相应权限
     * @param {string=} userId 可选, 不传表示返回自己是否有相应权限
     * @param {WhiteboardPermissionFlag} flag
     */
    hasPermission(flag: ForgeSlidePermissionFlag, userId?: string): boolean;
    /**
     * 添加权限
     * @param {WhiteboardPermissionFlag} flag 权限标记
     * @param {string=} userId 可选, 为 userId 添加权限, 不传表示为自己添加权限
     */
    addPermission(flag: ForgeSlidePermissionFlag, userId?: string): void;
    /**
     * 移除权限
     * @param {WhiteboardPermissionFlag} flag 权限标记
     * @param {string=} userId 可选, 为 userId 移除权限, 不传表示为自己移除权限
     */
    removePermission(flag: ForgeSlidePermissionFlag, userId?: string): void;
}
//# sourceMappingURL=ForgeSlidePermession.d.ts.map