import { i as CompositeStoreOptions, n as CompositeStoreFunctions, s as CompositeStoreState } from "../composite-store-C5m2qUBo.js";
import { ComboboxStore } from "../combobox/combobox-store.js";
import { HovercardStoreFunctions, HovercardStoreOptions, HovercardStoreState } from "../hovercard/hovercard-store.js";
import { MenuBarStore } from "./menu-bar-store.js";
import { Store, StoreOptions, StoreProps } from "@ariakit/store";
import { BivariantCallback, PickRequired, SetState, SetStateAction } from "@ariakit/utils";
//#region src/menu/menu-store.d.ts
declare function createMenuStore<T extends MenuStoreValues = MenuStoreValues>(props: PickRequired<MenuStoreProps<T>, "values" | "defaultValues">): MenuStore<T>;
declare function createMenuStore(props?: MenuStoreProps): MenuStore;
type MenuStoreValues = Record<string, string | boolean | number | ReadonlyArray<string | number>>;
interface MenuStoreState<T extends MenuStoreValues = MenuStoreValues> extends CompositeStoreState, HovercardStoreState {
  /** @default "vertical" */
  orientation: CompositeStoreState["orientation"];
  /** @default "bottom-start" */
  placement: HovercardStoreState["placement"];
  /** @default 0 */
  hideTimeout?: HovercardStoreState["hideTimeout"];
  /**
   * Determines the element that should be focused when the menu is opened.
   */
  initialFocus: "container" | "first" | "last";
  /**
   * A map of names and values that will be used by the
   * [`MenuItemCheckbox`](https://ariakit.com/reference/menu-item-checkbox) and
   * [`MenuItemRadio`](https://ariakit.com/reference/menu-item-radio)
   * components.
   *
   * Live examples:
   * - [MenuItemCheckbox](https://ariakit.com/examples/menu-item-checkbox)
   * - [Submenu with
   *   Combobox](https://ariakit.com/examples/menu-nested-combobox)
   */
  values: T;
}
interface MenuStoreFunctions<T extends MenuStoreValues = MenuStoreValues> extends CompositeStoreFunctions, HovercardStoreFunctions, Pick<MenuStoreOptions, "combobox" | "parent" | "menubar"> {
  /**
   * Hides the menu and all its parent menus.
   *
   * Live examples:
   * - [Submenu with
   *   Combobox](https://ariakit.com/examples/menu-nested-combobox)
   */
  hideAll: () => void;
  /**
   * Sets the `initialFocus` state.
   */
  setInitialFocus: SetState<MenuStoreState<T>["initialFocus"]>;
  /**
   * Sets the [`values`](https://ariakit.com/reference/menu-provider#values)
   * state.
   * @example
   * store.setValues({ watching: ["issues"] });
   * store.setValues((values) => ({ ...values, watching: ["issues"] }));
   */
  setValues: SetState<MenuStoreState<T>["values"]>;
  /**
   * Sets a specific menu value.
   *
   * Live examples:
   * - [Submenu with
   *   Combobox](https://ariakit.com/examples/menu-nested-combobox)
   * @example
   * store.setValue("watching", ["issues"]);
   * store.setValue("watching", (value) => [...value, "issues"]);
   */
  setValue: BivariantCallback<(name: string, value: SetStateAction<MenuStoreState<T>["values"][string]>) => void>;
}
interface MenuStoreOptions<T extends MenuStoreValues = MenuStoreValues> extends StoreOptions<MenuStoreState<T>, "orientation" | "placement" | "hideTimeout" | "values">, CompositeStoreOptions, HovercardStoreOptions {
  /**
   * A reference to a combobox store. This is used when combining the combobox
   * with a menu (e.g., dropdown menu with a search input). The stores will
   * share the same state.
   */
  combobox?: ComboboxStore | null;
  /**
   * A reference to a parent menu store. This is used on nested menus.
   */
  parent?: MenuStore | null;
  /**
   * A reference to a menubar store. This is used when rendering menus inside a
   * menubar.
   */
  menubar?: MenuBarStore | null;
  /**
   * The default values for the
   * [`values`](https://ariakit.com/reference/menu-provider#values) state.
   *
   * Live examples:
   * - [MenuItemCheckbox](https://ariakit.com/examples/menu-item-checkbox)
   * - [MenuItemRadio](https://ariakit.com/examples/menu-item-radio)
   * @default {}
   */
  defaultValues?: MenuStoreState<T>["values"];
}
interface MenuStoreProps<T extends MenuStoreValues = MenuStoreValues> extends MenuStoreOptions<T>, StoreProps<MenuStoreState<T>> {}
interface MenuStore<T extends MenuStoreValues = MenuStoreValues> extends MenuStoreFunctions<T>, Store<MenuStoreState<T>> {}
//#endregion
export { MenuStore, MenuStoreFunctions, MenuStoreOptions, MenuStoreProps, MenuStoreState, MenuStoreValues, createMenuStore };
//# sourceMappingURL=menu-store.d.ts.map