/** * InputBindings.ts * * Rebindable input action system: composite axes, chord combos, * binding profiles, and conflict detection. * * @module input */ export type BindingSource = 'key' | 'mouseButton' | 'gamepadButton' | 'gamepadAxis'; export interface InputBinding { id: string; action: string; source: BindingSource; code: string; modifiers?: string[]; scale?: number; } export interface CompositeAxis { name: string; positive: string; negative: string; } export interface ChordBinding { id: string; action: string; keys: string[]; order: 'any' | 'sequence'; } export interface BindingProfile { id: string; name: string; bindings: InputBinding[]; composites: CompositeAxis[]; chords: ChordBinding[]; } export interface BindingConflict { action1: string; action2: string; binding: string; severity: 'warning' | 'error'; } export declare class InputBindings { private profiles; private activeProfileId; constructor(); createProfile(id: string, name: string): BindingProfile; deleteProfile(id: string): boolean; setActiveProfile(id: string): boolean; getActiveProfile(): BindingProfile | null; getProfile(id: string): BindingProfile | undefined; getProfileCount(): number; bind(action: string, source: BindingSource, code: string, modifiers?: string[], scale?: number): InputBinding | null; unbind(bindingId: string): boolean; unbindAction(action: string): number; getBindingsForAction(action: string): InputBinding[]; addCompositeAxis(name: string, positive: string, negative: string): void; getCompositeAxes(): CompositeAxis[]; /** * Resolve a composite axis value from key states. */ resolveComposite(name: string, keyStates: Map): number; addChord(action: string, keys: string[], order?: 'any' | 'sequence'): ChordBinding; isChordActive(chordId: string, pressedKeys: Set): boolean; detectConflicts(): BindingConflict[]; exportProfile(profileId?: string): string; importProfile(json: string): BindingProfile | null; } //# sourceMappingURL=InputBindings.d.ts.map