import '../../../../../assert/js/assert.js';
import '../../../../../globals.js';
import TReadOnlyProperty from '../../../../../axon/js/TReadOnlyProperty.js';
import Range from '../../../../../dot/js/Range.js';
import { Node } from '../../../../../scenery/js/imports.js';
import GroupSelectModel from '../model/GroupSelectModel.js';
import GroupSelectView, { GroupSelectViewOptions } from './GroupSelectView.js';
type SelfOptions<ItemModel> = {
    getNextSelectedGroupItem: (delta: number, currentlySelectedGroupItem: ItemModel) => ItemModel;
    sortingRangeProperty: TReadOnlyProperty<Range>;
    sortingRangeListener?: (range: Range) => void;
    sortGroupItem: (groupItem: ItemModel, newValue: number) => void;
    onSort?: (groupItem: ItemModel, oldValue: number) => void;
    numberKeyMapper?: ((pressedKeys: string) => (number | null)) | null;
    sortStep?: number;
    pageSortStep?: number;
    shiftSortStep?: number;
};
type ParentOptions<ItemModel, ItemNode extends Node> = GroupSelectViewOptions<ItemModel, ItemNode>;
export type GroupSortInteractionViewOptions<ItemModel, ItemNode extends Node> = SelfOptions<ItemModel> & ParentOptions<ItemModel, ItemNode>;
export default class GroupSortInteractionView<ItemModel, ItemNode extends Node> extends GroupSelectView<ItemModel, ItemNode> {
    private readonly sortGroupItem;
    private readonly onSort;
    private readonly sortingRangeProperty;
    private readonly sortStep;
    private readonly shiftSortStep;
    private readonly pageSortStep;
    constructor(model: GroupSelectModel<ItemModel>, primaryFocusedNode: Node, // Client is responsible for setting accessibleName and nothing else!
    providedOptions: GroupSortInteractionViewOptions<ItemModel, ItemNode>);
    private onSortedValue;
    /**
     * Get the delta to change the value given what key was pressed. The returned delta may not result in a value in range,
     * please constrain value from range or provide your own defensive measures to this delta.
     */
    private getDeltaForKey;
    dispose(): void;
    /**
     * Creator factory, similar to PhetioObject.create(). This is most useful if you don't need to keep the instance of
     * your GroupSortInteractionView.
     */
    static create<ItemModel, ItemNode extends Node>(model: GroupSelectModel<ItemModel>, primaryFocusedNode: Node, providedOptions: GroupSortInteractionViewOptions<ItemModel, ItemNode>): GroupSortInteractionView<ItemModel, ItemNode>;
}
export {};
//# sourceMappingURL=GroupSortInteractionView.d.ts.map