import type { _NSDictionary } from "../Foundation/NSDictionary.js";
import type { _NSObject } from "../Foundation/NSObject.js";
import type { _NSSet } from "../Foundation/NSSet.js";
import type { _NSString } from "../Foundation/NSString.js";
import type { _GCController } from "./GCController.js";
import type { _GCControllerElement } from "./GCControllerElement.js";
import type { _GCKeyboard } from "./GCKeyboard.js";
import type { _GCMouse } from "./GCMouse.js";
import type { _GCRacingWheel } from "./GCRacingWheel.js";
import type { _GCStylus } from "./GCStylus.js";
export declare class _GCPhysicalInputProfile extends _NSObject {
    static alloc(): _GCPhysicalInputProfile;
    static new(): _GCPhysicalInputProfile;
    init(): _GCPhysicalInputProfile;
    /**
     * Profile elements can be accessed using keyed subscript notation, with a valid alias of its inputs. @example extendedGamepad["Button A"] == extendedGamepad.buttonA // YES @example microGamepad["Button X"] == microGamepad.buttonX // YES @note Equivalent to -elements
     */
    objectForKeyedSubscript$(key: _NSString): _GCControllerElement | null;
    /**
     * Polls the state vector of the physical input input and saves it to a new and writable instance of GCPhysicalInputProfile. If your application is heavily multithreaded this may also be useful to guarantee atomicity of input handling as a snapshot will not change based on user input once it is taken. @see snapshot @return A new physical input profile with the duplicated state vector of the current physical input
     */
    capture(): _GCPhysicalInputProfile;
    /**
     * Sets the state vector of the physical input profile to a copy of the passed in physical input profile's state vector. @note If the controller's snapshot flag is set to NO, this method has no effect. @see GCController.snapshot
     */
    setStateFromPhysicalInput$(physicalInput: _GCPhysicalInputProfile): void;
    /**
     * Returns the primary alias of the GCControllerElement that a given physical input maps to. @discussion If the user were to map a physical press of the A button of their game controller to the B button, then -[GCPhysicalInputProfile mappedElementAliasForPhysicalInputName: GCInputButtonA] would return GCInputButtonB. Note that mappings can change anytime your app is backgrounded, so make sure you update any relevant visuals when returning to foreground. @param inputName A GCInput string corresponding to the physical button you want the mapped element alias for. @returns A GCInput string corresponding to the primary alias of the GCControllerElement that a given physical button maps to, or nil if there is no mapping.
     */
    mappedElementAliasForPhysicalInputName$(inputName: _NSString): _NSString;
    /**
     * Returns a set of GCInput strings corresponding to physical inputs that are mapped to a given GCControllerElement. @discussion If the user mapped the physical press of the A button, the B button, and the X button to the B button, then -[GCPhysicalInputProfile mappedPhysicalInputNamesForElementAlias: GCInputButtonB] would return [GCInputButtonA, GCInputButtonB, GCInputButtonX]. Note that mappings can change anytime your app is backgrounded, so make sure you update any relevant visuals when returning to foreground. @param elementAlias A GCInput string corresponding to an alias of the GCControllerElement you want the physical buttons for. @returns A set of GCInput strings corresponding to physical inputs that are mapped to a given GCControllerElement, or an empty set if there are no mappings.
     */
    mappedPhysicalInputNamesForElementAlias$(elementAlias: _NSString): _NSSet;
    /**
     * A profile keeps a reference to the device that this profile is mapping input from
     */
    device(): _GCController | _GCKeyboard | _GCMouse | _GCRacingWheel | _GCStylus | null;
    /** The last time elements of this profile were updated. */
    lastEventTimestamp(): number;
    /**
     * Whether the user has remapped their physical input controls for this profile at the system level. @discussion On iOS and tvOS, users can remap their game controller inputs in Settings.
     */
    hasRemappedElements(): boolean;
    /**
     * Set this block if you want to be notified when a value on a element changed. If multiple elements have changed this block will be called for each element that changed. @param profile this profile that is being used to map the raw input data into logical values on controller elements such as the dpad or the buttons. @param element the element that has been modified.
     */
    valueDidChangeHandler(): ((arg0: _GCPhysicalInputProfile, arg1: _GCControllerElement) => void) | null;
    setValueDidChangeHandler$(value: ((arg0: _GCPhysicalInputProfile, arg1: _GCControllerElement) => void) | null): void;
    /**
     * The following properties allow for runtime lookup of any input element on a profile, when provided with a valid alias. @example extendedGamepad.elements["Button A"] == extendedGamepad.buttonA // YES @example extendedGamepad.dpads["Left Thumbstick"] == extendedGamepad.leftThumbstick // YES @example extendedGamepad.dpads["Button B"] // returns nil, "Button B" is not a GCControllerDirectionPad
     */
    elements(): _NSDictionary;
    buttons(): _NSDictionary;
    axes(): _NSDictionary;
    dpads(): _NSDictionary;
    touchpads(): _NSDictionary;
    /**
     * The following properties allow for dynamic querying of the input elements available on a profile.
     */
    allElements(): _NSSet;
    allButtons(): _NSSet;
    allAxes(): _NSSet;
    allDpads(): _NSSet;
    allTouchpads(): _NSSet;
}
