/**
 * @jsxRuntime classic
 * @jsx jsx
 */
import React from 'react';
import { jsx } from '@emotion/react';
import type { ExtractInjectionAPI } from '@atlaskit/editor-common/types/next-editor-plugin';
import type { BlockControlsPlugin } from '../blockControlsPluginType';
interface VisibilityContainerProps {
    api?: ExtractInjectionAPI<BlockControlsPlugin>;
    children: React.ReactNode;
    controlSide?: 'left' | 'right';
    forceVisibleOnMouseOut?: boolean;
    isPersistent?: boolean;
    /**
     * Set when the container should not create its own layout box while its descendants retain theirs.
     */
    shouldUseDisplayContents?: boolean;
}
type VisibilityWrapperProps = Pick<VisibilityContainerProps, 'children' | 'shouldUseDisplayContents'> & {
    shouldHide: boolean;
    useCssStyles: boolean;
};
type BlockControlsVisibilityOptions = Omit<VisibilityContainerProps, 'children' | 'shouldUseDisplayContents'>;
/**
 * Resolves visibility once so a surface can apply the same state to each rendered control without
 * creating a plugin-state subscription and hide-delay timer for every control wrapper.
 */
export declare const useBlockControlsVisibility: ({ api, controlSide, forceVisibleOnMouseOut, isPersistent, }: BlockControlsVisibilityOptions) => {
    shouldHide: boolean;
    useCssStyles: boolean;
};
export declare const VisibilityWrapper: ({ children, shouldHide, shouldUseDisplayContents, useCssStyles, }: VisibilityWrapperProps) => jsx.JSX.Element;
export declare const VisibilityContainer: ({ api, children, controlSide, forceVisibleOnMouseOut, isPersistent, shouldUseDisplayContents, }: VisibilityContainerProps) => jsx.JSX.Element;
export {};
