import Service from '@ember/service';
import type SortableGroupModifier from '../modifiers/sortable-group';
import type SortableItemModifier from '../modifiers/sortable-item';
export interface Group<T> {
    groupModifier: SortableGroupModifier<T> | undefined;
    items: SortableItemModifier<T>[];
}
export default class EmberSortableService<T> extends Service {
    /**
     * Internal State for any groups currently in DOM
     *
     * {
     *   groupName: {
     *     groupModifier: object,
     *     items: []
     *   }
     * }
     * @type {{}}
     */
    groups: Record<string, Group<T>>;
    /**
     * Register a new group with the service
     *
     * @param {String} groupName
     * @param {SortableGroupModifier} groupModifier
     */
    registerGroup(groupName: string, groupModifier: SortableGroupModifier<T> | undefined): void;
    /**
     * De-register a group with the service
     *
     * @param {String} groupName
     */
    deregisterGroup(groupName: string): void;
    /**
     * Register an item with this group
     *
     * @method registerItem
     * @param {String} groupName
     * @param {SortableItemModifier} item
     */
    registerItem(groupName: string, item: SortableItemModifier<T>): void;
    /**
     De-register an item with this group.
  
     @method deregisterItem
     @param groupName
     @param item
     */
    deregisterItem(groupName: string, item: SortableItemModifier<T>): void;
    /**
     * Fetch a group definition
     *
     * @param {String} groupName
     * @returns {*}
     */
    fetchGroup(groupName: string): Group<T>;
}
