/**
 * Copyright (c) Nicolas Gallagher.
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 * @flow
 */

import type { EventSubscription } from '../../vendor/react-native/vendor/emitter/EventEmitter';
import invariant from 'fbjs/lib/invariant';
import canUseDOM from '../../modules/canUseDom';
export type DisplayMetrics = {|
  fontScale: number,
  height: number,
  scale: number,
  width: number,
|};
type DimensionsValue = {|
  window: DisplayMetrics,
  screen: DisplayMetrics,
|};
type DimensionKey = 'window' | 'screen';
type DimensionEventListenerType = 'change';
const dimensions = {
  window: {
    fontScale: 1,
    height: 0,
    scale: 1,
    width: 0
  },
  screen: {
    fontScale: 1,
    height: 0,
    scale: 1,
    width: 0
  }
};
const listeners = {};
let shouldInit = canUseDOM;
declare function update(): any;
declare function handleResize(): any;
declare export default class Dimensions {
  static get(dimension: DimensionKey): DisplayMetrics,
  static set(initialDimensions: ?DimensionsValue): void,
  static addEventListener(type: DimensionEventListenerType, handler: (DimensionsValue) => void): EventSubscription,
  static removeEventListener(type: DimensionEventListenerType, handler: (DimensionsValue) => void): void,
}
if (canUseDOM) {
  if (window.visualViewport) {
    window.visualViewport.addEventListener('resize', handleResize, false);
  } else {
    window.addEventListener('resize', handleResize, false);
  }
}