import '../../chipper/js/browser/initialize-globals.js';
import '../../assert/js/assert.js';
import '../../globals.js';
/**
 * A Screen is the largest chunk of a simulation. (Java sims used the term Module, but that term
 * is too overloaded to use with JavaScript and Git.)
 *
 * When creating a Sim, Screens are supplied as the arguments. They can be specified as object literals or through
 * instances of this class. This class may centralize default behavior or state for Screens in the future, but right
 * now it only allows you to create Sims without using named parameter object literals.
 *
 * @author Sam Reid (PhET Interactive Simulations)
 */
import BooleanProperty from '../../axon/js/BooleanProperty.js';
import PhetioProperty from '../../axon/js/PhetioProperty.js';
import Property from '../../axon/js/Property.js';
import TReadOnlyProperty from '../../axon/js/TReadOnlyProperty.js';
import Dimension2 from '../../dot/js/Dimension2.js';
import IntentionalAny from '../../phet-core/js/types/IntentionalAny.js';
import PickRequired from '../../phet-core/js/types/PickRequired.js';
import StrictOmit from '../../phet-core/js/types/StrictOmit.js';
import { Color, Node, PDOMValueType, ProfileColorProperty } from '../../scenery/js/imports.js';
import PhetioObject, { 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 ScreenView from './ScreenView.js';
import 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;
//# sourceMappingURL=Screen.d.ts.map