import '../../chipper/js/browser/initialize-globals.js';
import '../../assert/js/assert.js';
import '../../query-string-machine/js/QueryStringMachine.js';
import '../../globals.js';
import BooleanProperty from '../../axon/js/BooleanProperty.js';
import Emitter from '../../axon/js/Emitter.js';
import NumberProperty from '../../axon/js/NumberProperty.js';
import Property from '../../axon/js/Property.js';
import ReadOnlyProperty from '../../axon/js/ReadOnlyProperty.js';
import TReadOnlyProperty from '../../axon/js/TReadOnlyProperty.js';
import Bounds2 from '../../dot/js/Bounds2.js';
import Dimension2 from '../../dot/js/Dimension2.js';
import PickOptional from '../../phet-core/js/types/PickOptional.js';
import { Node } from '../../scenery/js/imports.js';
import '../../sherpa/lib/game-up-camera-1.0.0.js';
import { PopupableNode } from '../../sun/js/Popupable.js';
import PhetioAction from '../../tandem/js/PhetioAction.js';
import PhetioObject, { PhetioObjectOptions } from '../../tandem/js/PhetioObject.js';
import { CreditsData } from './CreditsNode.js';
import HomeScreen from './HomeScreen.js';
import { Locale } from './i18n/localeProperty.js';
import LookAndFeel from './LookAndFeel.js';
import PreferencesModel from './preferences/PreferencesModel.js';
import { AnyScreen } from './Screen.js';
import SimDisplay from './SimDisplay.js';
type SelfOptions = {
    credits?: CreditsData;
    homeScreenWarningNode?: null | Node;
    preferencesModel?: PreferencesModel | null;
    webgl?: boolean;
    detachInactiveScreenViews?: boolean;
};
export type SimOptions = SelfOptions & PickOptional<PhetioObjectOptions, 'phetioDesigned'>;
export default class Sim extends PhetioObject {
    readonly simNameProperty: TReadOnlyProperty<string>;
    private readonly _isConstructionCompleteProperty;
    readonly isConstructionCompleteProperty: TReadOnlyProperty<boolean>;
    readonly dimensionProperty: TReadOnlyProperty<Dimension2>;
    private readonly resizeAction;
    private readonly navigationBar;
    readonly homeScreen: HomeScreen | null;
    readonly frameStartedEmitter: Emitter<[]>;
    readonly frameEndedEmitter: Emitter<[]>;
    readonly stepSimulationAction: PhetioAction<[number]>;
    readonly simScreens: AnyScreen[];
    readonly screens: AnyScreen[];
    readonly displayedSimNameProperty: TReadOnlyProperty<string>;
    readonly selectedScreenProperty: Property<AnyScreen>;
    private readonly allScreensCreated;
    private availableScreensProperty;
    activeSimScreensProperty: ReadOnlyProperty<AnyScreen[]>;
    readonly activeProperty: BooleanProperty;
    readonly browserTabVisibleProperty: TReadOnlyProperty<boolean>;
    readonly scaleProperty: NumberProperty;
    readonly boundsProperty: Property<Bounds2 | null>;
    readonly screenBoundsProperty: Property<Bounds2 | null>;
    readonly lookAndFeel: LookAndFeel;
    private readonly memoryMonitor;
    private readonly supportsGestureDescription;
    readonly hasKeyboardHelpContent: boolean;
    readonly version: string;
    frameCounter: number;
    private resizePending;
    readonly locale: Locale;
    private readonly simInfo;
    readonly display: SimDisplay;
    private readonly toolbar;
    readonly preferencesModel: PreferencesModel;
    private modalNodeStack;
    private readonly barrierRectangle;
    readonly topLayer: TopLayerNode;
    readonly rootNode: Node;
    private lastStepTime;
    private lastAnimationFrameTime;
    private simStartedTime;
    private readonly boundRunAnimationLoop;
    private readonly updateBackground;
    readonly credits: CreditsData;
    private readonly detachInactiveScreenViews;
    /**
     * @param simNameProperty - the name of the simulation, to be displayed in the navbar and homescreen
     * @param allSimScreens - the possible screens for the sim in order of declaration (does not include the home screen)
     * @param [providedOptions] - see below for options
     */
    constructor(simNameProperty: TReadOnlyProperty<string>, allSimScreens: AnyScreen[], providedOptions?: SimOptions);
    /**
     * Update the views of the sim. This is meant to run after the state has been set to make sure that all view
     * elements are in sync with the new, current state of the sim. (even when the sim is inactive, as in the state
     * wrapper).
     */
    private updateViews;
    private finishInit;
    showPopup(popup: PopupableNode, isModal: boolean): void;
    hidePopup(popup: PopupableNode, isModal: boolean): void;
    private resizeToWindow;
    private resize;
    start(): void;
    private runAnimationLoop;
    stepOneFrame(): void;
    /**
     * Update the simulation model, view, scenery display with an elapsed time of dt.
     * @param dt - in seconds
     * (phet-io)
     */
    stepSimulation(dt: number): void;
    /**
     * Hide or show all accessible content related to the sim ScreenViews, and navigation bar. This content will
     * remain visible, but not be tab navigable or readable with a screen reader. This is generally useful when
     * displaying a pop up or modal dialog.
     */
    setPDOMViewsVisible(visible: boolean): void;
    /**
     * Set the voicingVisible state of simulation components. When false, ONLY the Toolbar
     * and its buttons will be able to announce Voicing utterances. This is used by the
     * "Sim Voicing" switch in the toolbar which will disable all Voicing in the sim so that
     * only Toolbar content is announced.
     */
    setSimVoicingVisible(visible: boolean): void;
    /**
     * Sets voicingVisible on all elements "behind" the modal node stack. In this case, voicing should not work for those
     * components when set to false.
     * @param visible
     */
    setNonModalVoicingVisible(visible: boolean): void;
    /**
     * Checks for whether multi-screen sims have screen names that are in phet.screenNameKeys within package.json,
     * see https://github.com/phetsims/chipper/issues/1367
     */
    private auditScreenNameKeys;
    private fuzzFrame;
    /**
     * Get helpful information for replicating the bug when an assertion occurs.
     */
    getAssertionDebugInfo(): object;
}
type LayoutNode = Node & {
    layout?: (layoutBounds: Bounds2) => void;
};
type TopLayerNode = {
    addChild(child: LayoutNode): void;
    children: LayoutNode[];
} & Node;
export {};
//# sourceMappingURL=Sim.d.ts.map