import '../../../../../assert/js/assert.js';
import '../../../../../globals.js';
/**
 * This doc assumes you have read the doc in GroupSelectModel. Read that first as it explains the "group select
 * interaction" more generally.
 *
 * The view of the "Group Sort Interaction." This type handles adding the controller for selecting and grabbing
 * in the interaction for (keyboard). It also handles the individual and group focus highlights.
 *
 * This class can be used per scene, but the model is best used per screen.
 *
 * @author Michael Kauzmann (PhET Interactive Simulations)
 * @author Marla Schulz (PhET Interactive Simulations)
 */
import Disposable, { DisposableOptions } from '../../../../../axon/js/Disposable.js';
import Emitter from '../../../../../axon/js/Emitter.js';
import TReadOnlyProperty from '../../../../../axon/js/TReadOnlyProperty.js';
import StrictOmit from '../../../../../phet-core/js/types/StrictOmit.js';
import { Node, ParallelDOMOptions, Path } from '../../../../../scenery/js/imports.js';
import { GrabReleaseCueNodeOptions } from '../../nodes/GrabReleaseCueNode.js';
import GroupSelectModel from '../model/GroupSelectModel.js';
import SortCueArrowNode from './SortCueArrowNode.js';
type SelfOptions<ItemModel, ItemNode extends Node> = {
    getGroupItemToSelect: (() => ItemModel | null);
    isGroupItemEnabled?: (groupItem: ItemModel) => boolean;
    getNodeFromModelItem: (model: ItemModel) => ItemNode | null;
    getHighlightNodeFromModelItem?: (model: ItemModel) => Node | null;
    onGrab?: (groupItem: ItemModel) => void;
    onRelease?: (groupItem: ItemModel) => void;
    grabReleaseCueOptions?: Partial<StrictOmit<GrabReleaseCueNodeOptions, 'visibleProperty'>>;
    primaryFocusedNodeOptions?: ParallelDOMOptions;
};
type ParentOptions = DisposableOptions;
export type GroupSelectViewOptions<ItemModel, ItemNode extends Node> = SelfOptions<ItemModel, ItemNode> & ParentOptions;
declare class GroupSelectView<ItemModel, ItemNode extends Node> extends Disposable {
    protected readonly model: GroupSelectModel<ItemModel>;
    readonly groupSortGroupFocusHighlightPath: Path;
    readonly grabReleaseCueNode: Node;
    readonly positionSortCueNodeEmitter: Emitter<[]>;
    private readonly getNodeFromModelItem;
    constructor(model: GroupSelectModel<ItemModel>, primaryFocusedNode: Node, // Client is responsible for setting accessibleName and nothing else!
    providedOptions: GroupSelectViewOptions<ItemModel, ItemNode>);
    protected onGroupItemChange(newGroupItem: ItemModel): void;
    dispose(): void;
    /**
     * Use SortCueArrowNode to create a Node for the keyboard sorting cue. Can also be used as the mouse/touch cue
     * Node if desired.
     */
    static createSortCueNode(visibleProperty: TReadOnlyProperty<boolean>, scale?: number): SortCueArrowNode;
    /**
     * 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: GroupSelectViewOptions<ItemModel, ItemNode>): GroupSelectView<ItemModel, ItemNode>;
}
export default GroupSelectView;
//# sourceMappingURL=GroupSelectView.d.ts.map