/**
 * @license
 * Copyright 2021 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */

/**
 * @fileoverview The interface for a positionable UI element.
 * @author kozbial@google.com (Monica Kozbial)
 */

'use strict';

goog.module('Blockly.IPositionable');
goog.module.declareLegacyNamespace();

goog.require('Blockly.IComponent');

goog.requireType('Blockly.MetricsManager');
goog.requireType('Blockly.utils.Rect');


/**
 * Interface for a component that is positioned on top of the workspace.
 * @extends {Blockly.IComponent}
 * @interface
 */
const IPositionable = function() {};

/**
 * Positions the element. Called when the window is resized.
 * @param {!Blockly.MetricsManager.UiMetrics} metrics The workspace metrics.
 * @param {!Array<!Blockly.utils.Rect>} savedPositions List of rectangles that
 *     are already on the workspace.
 */
IPositionable.prototype.position;

/**
 * Returns the bounding rectangle of the UI element in pixel units relative to
 * the Blockly injection div.
 * @return {?Blockly.utils.Rect} The UI elements’s bounding box. Null if
 *   bounding box should be ignored by other UI elements.
 */
IPositionable.prototype.getBoundingRectangle;

exports = IPositionable;

@@ -288,24 +288,43 @@
 mespace();%0A%0A
+const IComponent = 
 goog.require
@@ -347,17 +347,29 @@
 nent');%0A
-%0A
+const Rect = 
 goog.req
@@ -390,26 +390,42 @@
 kly.
-MetricsManager');%0A
+utils.Rect');%0Aconst %7BUiMetrics%7D = 
 goog
@@ -442,34 +442,38 @@
 pe('Blockly.
-utils.Rect
+MetricsManager
 ');%0A%0A%0A/**%0A *
@@ -556,24 +556,16 @@
 xtends %7B
-Blockly.
 ICompone
@@ -705,31 +705,8 @@
 m %7B!
-Blockly.MetricsManager.
 UiMe
@@ -762,30 +762,16 @@
 !Array%3C!
-Blockly.utils.
 Rect%3E%7D s
@@ -997,16 +997,16 @@
 on div.%0A
+
  * @retu
@@ -1010,30 +1010,16 @@
 eturn %7B?
-Blockly.utils.
 Rect%7D Th

Migrate core/interfaces/i_positionable.js named requires