"use strict";
/*---------------------------------------------------------------------------------------------
 * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
 * See LICENSE.md in the project root for license terms and full copyright notice.
 *--------------------------------------------------------------------------------------------*/
/** @packageDocumentation
 * @module Popup
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.ToolbarPopup = void 0;
const React = require("react");
const ts_key_enum_1 = require("ts-key-enum");
const core_react_1 = require("@itwin/core-react");
const components_react_1 = require("@itwin/components-react");
const CursorPopup_1 = require("../cursor/cursorpopup/CursorPopup");
const PopupManager_1 = require("./PopupManager");
const PositionPopup_1 = require("./PositionPopup");
const Toolbar_1 = require("../toolbar/Toolbar");
const ConfigurableUiContent_1 = require("../configurableui/ConfigurableUiContent");
const Placement_1 = require("../utils/Placement");
/** Popup component for Toolbar
 * @beta
 */
class ToolbarPopup extends React.PureComponent {
    constructor() {
        super(...arguments);
        this.state = {
            size: new core_react_1.Size(-1, -1),
        };
        this._onSizeKnown = (newSize) => {
            if (!this.state.size.equals(newSize))
                this.setState({ size: core_react_1.Size.create(newSize) });
        };
        this._handleKeyDown = (event) => {
            switch (event.key) {
                case ts_key_enum_1.Key.Escape.valueOf():
                    this._cancel();
                    break;
            }
        };
    }
    _cancel() {
        if (this.props.onCancel) {
            this.props.onCancel();
        }
    }
    render() {
        let point = PopupManager_1.PopupManager.getPopupPosition(this.props.el ?? this.context, this.props.pt, new core_react_1.Point(), this.state.size);
        const popupRect = CursorPopup_1.CursorPopup.getPopupRect(point, this.props.offset, this.state.size, 
        // eslint-disable-next-line deprecation/deprecation
        this.props.placement ?? (0, Placement_1.mapToPlacement)(this.props.relativePosition));
        point = new core_react_1.Point(popupRect.left, popupRect.top);
        return (React.createElement(PositionPopup_1.PositionPopup, { key: this.props.id, className: "uifw-no-border", point: point, onSizeKnown: this._onSizeKnown },
            React.createElement(core_react_1.DivWithOutsideClick, { onOutsideClick: this.props.onCancel, onKeyDown: this._handleKeyDown },
                React.createElement(core_react_1.FocusTrap, { active: true, returnFocusOnDeactivate: true },
                    React.createElement(Toolbar_1.Toolbar, { expandsTo: components_react_1.Direction.Bottom, panelAlignment: components_react_1.ToolbarPanelAlignment.Start, items: this.props.items, useDragInteraction: true, toolbarOpacitySetting: components_react_1.ToolbarOpacitySetting.Defaults, onItemExecuted: this.props.onItemExecuted })))));
    }
}
exports.ToolbarPopup = ToolbarPopup;
/** @internal */
ToolbarPopup.contextType = ConfigurableUiContent_1.WrapperContext;
//# sourceMappingURL=ToolbarPopup.js.map