import '../../globals.js';
import '../../chipper/js/browser/initialize-globals.js';
import BooleanProperty from '../../axon/js/BooleanProperty.js';
import type PhetioProperty from '../../axon/js/PhetioProperty.js';
import Property from '../../axon/js/Property.js';
import type TReadOnlyProperty from '../../axon/js/TReadOnlyProperty.js';
import Dimension2 from '../../dot/js/Dimension2.js';
import type IntentionalAny from '../../phet-core/js/types/IntentionalAny.js';
import type PickRequired from '../../phet-core/js/types/PickRequired.js';
import type StrictOmit from '../../phet-core/js/types/StrictOmit.js';
import { type PDOMValueType } from '../../scenery/js/accessibility/pdom/ParallelDOM.js';
import type Node from '../../scenery/js/nodes/Node.js';
import type Color from '../../scenery/js/util/Color.js';
import type ProfileColorProperty from '../../scenery/js/util/ProfileColorProperty.js';
import PhetioObject, { type PhetioObjectOptions } from '../../tandem/js/PhetioObject.js';
import Tandem from '../../tandem/js/Tandem.js';
import IOType from '../../tandem/js/types/IOType.js';
import ScreenIcon from './ScreenIcon.js';
import type ScreenView from './ScreenView.js';
import type TModel from './TModel.js';
type SelfOptions = {
    name?: PhetioProperty<string> | null;
    instrumentNameProperty?: boolean;
    backgroundColorProperty?: Property<Color | string> | Property<Color> | Property<string> | ProfileColorProperty;
    homeScreenIcon?: ScreenIcon | null;
    showUnselectedHomeScreenIconFrame?: boolean;
    navigationBarIcon?: ScreenIcon | null;
    showScreenIconFrameForNavigationBarFill?: string | null;
    maxDT?: number;
    createKeyboardHelpNode?: null | ((tandem: Tandem) => Node);
    screenButtonsHelpText?: PDOMValueType | null;
};
export type ScreenOptions = SelfOptions & StrictOmit<PhetioObjectOptions, 'tandemNameSuffix'> & // Tandem.RootTandem.createTandem requires that the suffix is Tandem.SCREEN_TANDEM_NAME_SUFFIX.
PickRequired<PhetioObjectOptions, 'tandem'>;
export type AnyScreen = Screen<IntentionalAny, ScreenView>;
declare class Screen<M extends TModel, V extends ScreenView> extends PhetioObject {
    backgroundColorProperty: Property<Color> | Property<string> | Property<Color | string>;
    readonly maxDT: number;
    readonly activeProperty: BooleanProperty;
    readonly screenButtonsHelpText: PDOMValueType;
    readonly nameProperty: TReadOnlyProperty<string>;
    readonly showScreenIconFrameForNavigationBarFill: string | null;
    readonly homeScreenIcon: ScreenIcon | null;
    navigationBarIcon: ScreenIcon | null;
    readonly showUnselectedHomeScreenIconFrame: boolean;
    readonly createKeyboardHelpNode: null | ((tandem: Tandem) => Node);
    readonly pdomDisplayNameProperty: TReadOnlyProperty<string>;
    private readonly createModel;
    private readonly createView;
    private _model;
    private _view;
    static readonly HOME_SCREEN_ICON_ASPECT_RATIO: number;
    static readonly MINIMUM_HOME_SCREEN_ICON_SIZE: Dimension2;
    static readonly MINIMUM_NAVBAR_ICON_SIZE: Dimension2;
    static readonly ScreenIO: IOType<any, any, any>;
    constructor(createModel: () => M, createView: (model: M) => V, providedOptions: ScreenOptions);
    get model(): M;
    get view(): V;
    hasModel(): boolean;
    hasView(): boolean;
    reset(): void;
    /**
     * Initialize the model.
     * (joist-internal)
     */
    initializeModel(): void;
    /**
     * Initialize the view.
     * (joist-internal)
     * @param simNameProperty - The Property of the name of the sim, used for a11y.
     * @param displayedSimNameProperty - The Property of the display name of the sim, used for a11y. Could change based on screen.
     * @param numberOfScreens - the number of screens in the sim this runtime (could change with `?screens=...`.
     * @param isHomeScreen - if this screen is the home screen.
     */
    initializeView(simNameProperty: TReadOnlyProperty<string>, displayedSimNameProperty: TReadOnlyProperty<string>, numberOfScreens: number, isHomeScreen: boolean): void;
}
export default Screen;
