import { Context, ReactElement } from "react"; import { BivariantCallback } from "ariakit-utils/types"; import { Options, Props, WrapElement } from "./types"; declare type StateFilterFn = BivariantCallback<(nextState: T) => unknown>; declare type StateFilterDeps = Array | keyof NonNullable>; declare type StateFilter = StateFilterDeps | StateFilterFn; /** * Creates a context that can be passed to `useStore` and `useStoreProvider`. */ export declare function createStoreContext(): Context; /** * Creates a type-safe component with the `as` prop, `state` prop, * `React.forwardRef` and `React.memo`. * * @example * import { Options, createMemoComponent } from "ariakit-react-utils/store"; * * type Props = Options<"div"> & { * state?: { customProp: boolean }; * }; * * const Component = createMemoComponent( * ({ state, ...props }) =>
* ); * * */ export declare function createMemoComponent(render: (props: Props) => ReactElement, propsAreEqual?: (prev: Props, next: Props) => boolean): import("./types").Component; /** * Returns props with a `wrapElement` function that wraps an element with a * React Context Provider that provides a store context to consumers. * @example * import * as React from "react"; * import { useStoreProvider } from "ariakit-react-utils/store"; * * const StoreContext = createStoreContext(); * * function Component({ state, ...props }) { * const { wrapElement } = useStoreProvider({ state, ...props }, StoreContext); * return wrapElement(
); * } */ export declare function useStoreProvider({ state, ...props }: P & { state?: S; wrapElement?: WrapElement; }, context: Context): Omit

& { wrapElement: WrapElement; }; /** * Adds publishing capabilities to state so it can be passed to `useStore` or * `useStoreProvider` later. * @example * import { useStorePublisher } from "ariakit-react-utils/store"; * * function useComponentState() { * const state = React.useMemo(() => ({ a: "a" }), []); * return useStorePublisher(state); * } */ export declare function useStorePublisher(state: T): T; /** * Handles state updates on the state or context state passed as the first * argument based on the filter argument. * @example * import { useStore } from "ariakit-react-utils/store"; * * const ContextState = createContextState(); * * function Component({ state }) { * state = useStore(state || ContextState, ["stateProp"]); * } */ export declare function useStore(stateOrContext: T | Context, filter?: StateFilter): any; export {};