import { Store } from '@mui/x-internals/store';
import { MinimalTreeViewParameters, TreeViewParametersToStateMapper, MinimalTreeViewState } from "./MinimalTreeViewStore.types.mjs";
import { TreeViewValidItem } from "../../models/index.mjs";
import { TimeoutManager } from "./TimeoutManager.mjs";
import { TreeViewKeyboardNavigationPlugin } from "../plugins/keyboardNavigation/index.mjs";
import { TreeViewFocusPlugin } from "../plugins/focus/TreeViewFocusPlugin.mjs";
import { TreeViewItemsPlugin } from "../plugins/items/TreeViewItemsPlugin.mjs";
import { TreeViewSelectionPlugin } from "../plugins/selection/TreeViewSelectionPlugin.mjs";
import { TreeViewExpansionPlugin } from "../plugins/expansion/index.mjs";
import { TreeViewItemPluginManager } from "./TreeViewItemPluginManager.mjs";
import { TreeViewEventEvent, TreeViewEventListener, TreeViewEventParameters, TreeViewEvents } from "../models/index.mjs";
export declare class MinimalTreeViewStore<R extends TreeViewValidItem<R>, Multiple extends boolean | undefined, State extends MinimalTreeViewState<R, Multiple> = MinimalTreeViewState<R, Multiple>, Parameters extends MinimalTreeViewParameters<R, Multiple> = MinimalTreeViewParameters<R, Multiple>> extends Store<State> {
  private initialParameters;
  private mapper;
  private eventManager;
  instanceName: string;
  parameters: Parameters;
  timeoutManager: TimeoutManager;
  itemPluginManager: TreeViewItemPluginManager<this>;
  items: TreeViewItemsPlugin<R>;
  focus: TreeViewFocusPlugin;
  expansion: TreeViewExpansionPlugin;
  selection: TreeViewSelectionPlugin<Multiple>;
  keyboardNavigation: TreeViewKeyboardNavigationPlugin;
  constructor(parameters: Parameters, instanceName: string, mapper: TreeViewParametersToStateMapper<R, Multiple, State, Parameters>);
  /**
   * Builds an object containing the method that should be exposed publicly by the Tree View components.
   */
  buildPublicAPI(): {
    setItemSelection: ({
      itemId,
      event,
      keepExistingSelection,
      shouldBeSelected
    }: {
      itemId: string;
      event?: React.SyntheticEvent | null;
      shouldBeSelected?: boolean;
      keepExistingSelection?: boolean;
    }) => void;
    isItemExpanded: (itemId: import("../../index.mjs").TreeViewItemId) => boolean;
    setItemExpansion: ({
      itemId,
      event,
      shouldBeExpanded
    }: {
      itemId: import("../../index.mjs").TreeViewItemId;
      event?: React.SyntheticEvent | null;
      shouldBeExpanded?: boolean;
    }) => void;
    focusItem: (event: React.SyntheticEvent | null, itemId: import("../../index.mjs").TreeViewItemId) => void;
    getItem: (itemId: import("../../index.mjs").TreeViewItemId) => R;
    getItemDOMElement: (itemId: import("../../index.mjs").TreeViewItemId) => HTMLElement | null;
    getItemOrderedChildrenIds: (itemId: import("../../index.mjs").TreeViewItemId | null) => import("../../index.mjs").TreeViewItemId[];
    getItemTree: () => R[];
    getParentId: (itemId: import("../../index.mjs").TreeViewItemId) => import("../../index.mjs").TreeViewItemId | null;
    setIsItemDisabled: ({
      itemId,
      shouldBeDisabled
    }: {
      itemId: import("../../index.mjs").TreeViewItemId;
      shouldBeDisabled?: boolean;
    }) => void;
  };
  /**
   * Updates the state of the Tree View based on the new parameters provided to the root component.
   */
  updateStateFromParameters(parameters: Parameters): void;
  /**
   * Returns a cleanup function that need to be called when the store is destroyed.
   */
  disposeEffect: () => () => void;
  /**
   * Whether updates based on `props.items` change should be ignored.
   */
  shouldIgnoreItemsStateUpdate: () => boolean;
  /**
   * Registers an effect to be run when the value returned by the selector changes.
   */
  registerStoreEffect: <Value>(selector: (state: State) => Value, effect: (previous: Value, next: Value) => void) => void;
  /**
   * Publishes an event to all its subscribers.
   */
  publishEvent: <E extends TreeViewEvents>(name: E, params: TreeViewEventParameters<E>, event: TreeViewEventEvent<E>) => void;
  /**
   * Subscribe to an event emitted by the store.
   * For now, the subscription is only removed when the store is destroyed.
   */
  subscribeEvent: <E extends TreeViewEvents>(eventName: E, handler: TreeViewEventListener<E>) => void;
}