import '../../../assert/js/assert.js';
import '../../../tandem/js/PhetioIDUtils.js';
import '../../../globals.js';
import TReadOnlyProperty from '../../../axon/js/TReadOnlyProperty.js';
import Dimension2 from '../../../dot/js/Dimension2.js';
import { AlignBoxXAlign, AlignBoxYAlign, Color, Node, NodeOptions, PaintableNode, Path, PressListenerOptions, SizableOptions, TColor, TPaint, VoicingOptions } from '../../../scenery/js/imports.js';
import ButtonInteractionState from './ButtonInteractionState.js';
import ButtonModel from './ButtonModel.js';
import TButtonAppearanceStrategy, { TButtonAppearanceStrategyOptions } from './TButtonAppearanceStrategy.js';
import TContentAppearanceStrategy, { TContentAppearanceStrategyOptions } from './TContentAppearanceStrategy.js';
import TinyProperty from '../../../axon/js/TinyProperty.js';
type EnabledAppearanceStrategy = (enabled: boolean, button: Node, background: Node, content: Node | null) => void;
type SelfOptions = {
    content?: Node | null;
    xMargin?: number;
    yMargin?: number;
    xAlign?: AlignBoxXAlign;
    yAlign?: AlignBoxYAlign;
    xContentOffset?: number;
    yContentOffset?: number;
    listenerOptions?: PressListenerOptions;
    baseColor?: TPaint;
    disabledColor?: TPaint;
    buttonAppearanceStrategy?: TButtonAppearanceStrategy;
    buttonAppearanceStrategyOptions?: TButtonAppearanceStrategyOptions;
    contentAppearanceStrategy?: TContentAppearanceStrategy | null;
    contentAppearanceStrategyOptions?: TContentAppearanceStrategyOptions;
    enabledAppearanceStrategy?: EnabledAppearanceStrategy;
};
type ParentOptions = SizableOptions & VoicingOptions & NodeOptions;
export type ButtonNodeOptions = SelfOptions & ParentOptions;
declare const ButtonNode_base: typeof Node & import("../../../phet-core/js/types/Constructor.js").default<import("../../../scenery/js/imports.js").TVoicing<Node>> & import("../../../phet-core/js/types/Constructor.js").default<import("../../../scenery/js/imports.js").TWidthSizable & import("../../../scenery/js/imports.js").THeightSizable & {
    validateLocalPreferredSize(): void;
}>;
export default class ButtonNode extends ButtonNode_base {
    protected buttonModel: ButtonModel;
    private readonly _settableBaseColorProperty;
    private readonly _disabledColorProperty;
    private readonly baseColorProperty;
    private readonly _pressListener;
    private readonly disposeButtonNode;
    protected readonly content: Node | null;
    readonly contentContainer: Node | null;
    protected readonly layoutSizeProperty: TinyProperty<Dimension2>;
    protected readonly maxLineWidth: number;
    static FlatAppearanceStrategy: TButtonAppearanceStrategy;
    /**
     * @param buttonModel
     * @param buttonBackground - the background of the button (like a circle or rectangle).
     * @param interactionStateProperty - a Property that is used to drive the visual appearance of the button
     * @param providedOptions - this type does not mutate its options, but relies on the subtype to
     */
    protected constructor(buttonModel: ButtonModel, buttonBackground: Path, interactionStateProperty: TReadOnlyProperty<ButtonInteractionState>, providedOptions?: ButtonNodeOptions);
    dispose(): void;
    /**
     * Sets the base color, which is the main background fill color used for the button.
     */
    setBaseColor(baseColor: TColor): void;
    set baseColor(baseColor: TColor);
    get baseColor(): TColor;
    /**
     * Gets the base color for this button.
     */
    getBaseColor(): TColor;
    /**
     * Manually click the button, as it would be clicked in response to alternative input. Recommended only for
     * accessibility usages. For the most part, PDOM button functionality should be managed by PressListener, this should
     * rarely be used.
     */
    pdomClick(): void;
}
/**
 * FlatAppearanceStrategy is a value for ButtonNode options.buttonAppearanceStrategy. It makes a
 * button look flat, i.e. no shading or highlighting, with color changes on mouseover, press, etc.
 */
export declare class FlatAppearanceStrategy {
    readonly maxLineWidth: number;
    private readonly disposeFlatAppearanceStrategy;
    /**
     * @param buttonBackground - the Node for the button's background, sans content
     * @param interactionStateProperty - interaction state, used to trigger updates
     * @param baseColorProperty - base color from which other colors are derived
     * @param [providedOptions]
     */
    constructor(buttonBackground: PaintableNode, interactionStateProperty: TReadOnlyProperty<ButtonInteractionState>, baseColorProperty: TReadOnlyProperty<Color>, providedOptions?: TButtonAppearanceStrategyOptions);
    dispose(): void;
}
export {};
//# sourceMappingURL=ButtonNode.d.ts.map