export interface WorkspaceUiRect {
    readonly x: number;
    readonly y: number;
    readonly w: number;
    readonly h: number;
}
export interface WorkspaceUiView {
    readonly zoom: number;
    readonly x: number;
    readonly y: number;
}
export interface WorkspaceUiSelectionState {
    readonly focusedWindowId: string | null;
    readonly selectedWindowIds: readonly string[];
}
export type WorkspaceCommandAuthority = "user" | "user-confirm" | "agent-proposal" | "tool" | "model";
export type WorkspaceCommandCategory = "workspace" | "window" | "selection" | "navigation" | "review" | "verification" | "evidence" | "model";
export type WorkspaceKeyChordModifier = "cmd" | "ctrl" | "alt" | "shift";
export interface WorkspaceKeyChord {
    readonly key: string;
    readonly mod: readonly WorkspaceKeyChordModifier[];
}
export interface WorkspaceCommandContext {
    readonly userConfirmed: boolean;
    readonly sourceObjectId?: string;
}
export interface WorkspaceCommand {
    readonly id: string;
    readonly label: string;
    readonly category: WorkspaceCommandCategory;
    readonly authority: WorkspaceCommandAuthority;
    readonly shortcut?: WorkspaceKeyChord;
    readonly disabled?: () => string | null;
    readonly run: (ctx: WorkspaceCommandContext) => Promise<void> | void;
}
export interface WorkspaceUiWindowSnapshot {
    readonly id: string;
    readonly type: string;
    readonly rect: WorkspaceUiRect;
    readonly z: number;
}
export type WorkspaceUiAction = {
    readonly kind: "ui.window.move";
    readonly windowId: string;
    readonly before: WorkspaceUiRect;
    readonly after: WorkspaceUiRect;
} | {
    readonly kind: "ui.window.resize";
    readonly windowId: string;
    readonly before: WorkspaceUiRect;
    readonly after: WorkspaceUiRect;
} | {
    readonly kind: "ui.window.zorder";
    readonly windowId: string;
    readonly before: number;
    readonly after: number;
} | {
    readonly kind: "ui.window.close";
    readonly windowId: string;
    readonly windowSnapshot: WorkspaceUiWindowSnapshot;
} | {
    readonly kind: "ui.window.open";
    readonly windowId: string;
    readonly windowSnapshot: WorkspaceUiWindowSnapshot;
} | {
    readonly kind: "ui.workspace.pan";
    readonly before: WorkspaceUiView;
    readonly after: WorkspaceUiView;
} | {
    readonly kind: "ui.workspace.zoom";
    readonly before: WorkspaceUiView;
    readonly after: WorkspaceUiView;
} | {
    readonly kind: "ui.workspace.fit";
    readonly before: WorkspaceUiView;
    readonly after: WorkspaceUiView;
} | {
    readonly kind: "ui.panel.toggle";
    readonly panel: string;
    readonly before: boolean;
    readonly after: boolean;
} | {
    readonly kind: "ui.selection.change";
    readonly before: WorkspaceUiSelectionState;
    readonly after: WorkspaceUiSelectionState;
} | {
    readonly kind: "ui.tab.switch";
    readonly before: string;
    readonly after: string;
};
export type WorkspaceUiActionKind = WorkspaceUiAction["kind"];
type AssertUiPrefixed<K extends `ui.${string}`> = K;
export type WorkspaceUiActionKindChecked = AssertUiPrefixed<WorkspaceUiActionKind>;
export interface WorkspaceUndoStackApi {
    readonly canUndo: boolean;
    readonly canRedo: boolean;
    readonly undoLabel: string | null;
    readonly redoLabel: string | null;
    push(action: WorkspaceUiAction): void;
    undo(): void;
    redo(): void;
    clear(): void;
}
export interface WorkspaceKeyboardShortcutBinding {
    readonly commandId: string;
    readonly chord: WorkspaceKeyChord;
}
export interface WorkspaceKeyboardShortcutConflict {
    readonly chord: WorkspaceKeyChord;
    readonly commandIds: readonly string[];
}
export declare const WORKSPACE_RESERVED_CHORDS: readonly WorkspaceKeyChord[];
export declare function workspaceActionLabel(action: WorkspaceUiAction): string;
export declare function workspaceChordKey(chord: WorkspaceKeyChord): string;
export declare function workspaceChordsEqual(a: WorkspaceKeyChord, b: WorkspaceKeyChord): boolean;
export declare function isWorkspaceReservedChord(chord: WorkspaceKeyChord): boolean;
export declare function workspaceInverseAction(action: WorkspaceUiAction): WorkspaceUiAction;
export {};
//# sourceMappingURL=workspace-ui.d.ts.map