/** * @license * Copyright 2011 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { DeleteArea } from './delete_area.js'; import './events/events_trashcan_open.js'; import type { IAutoHideable } from './interfaces/i_autohideable.js'; import type { IDraggable } from './interfaces/i_draggable.js'; import type { IFlyout } from './interfaces/i_flyout.js'; import type { IPositionable } from './interfaces/i_positionable.js'; import type { UiMetrics } from './metrics_manager.js'; import { Rect } from './utils/rect.js'; import type { WorkspaceSvg } from './workspace_svg.js'; /** * Class for a trash can. */ export declare class Trashcan extends DeleteArea implements IAutoHideable, IPositionable { private workspace; /** * The unique id for this component that is used to register with the * ComponentManager. */ id: string; /** * A list of JSON (stored as strings) representing blocks in the trashcan. */ private readonly contents; /** * The trashcan flyout. * * @internal */ flyout: IFlyout | null; /** Current open/close state of the lid. */ isLidOpen: boolean; /** * The minimum openness of the lid. Used to indicate if the trashcan * contains blocks. */ private minOpenness; /** The SVG group containing the trash can. */ private svgGroup; /** The SVG image element of the trash can lid. */ private svgLid; /** Task ID of opening/closing animation. */ private lidTask; /** Current state of lid opening (0.0 = closed, 1.0 = open). */ private lidOpen; /** Left coordinate of the trash can. */ private left; /** Top coordinate of the trash can. */ private top; /** Whether this trash can has been initialized. */ private initialized; /** @param workspace The workspace to sit in. */ constructor(workspace: WorkspaceSvg); /** * Create the trash can elements. * * @returns The trash can's SVG group. */ createDom(): SVGElement; /** Initializes the trash can. */ init(): void; /** * Dispose of this trash can. * Unlink from all DOM elements to prevent memory leaks. */ dispose(): void; /** * Whether the trashcan has contents. * * @returns True if the trashcan has contents. */ private hasContents; /** * Returns true if the trashcan contents-flyout is currently open. * * @returns True if the trashcan contents-flyout is currently open. */ contentsIsOpen(): boolean; /** Opens the trashcan flyout. */ openFlyout(): void; /** Closes the trashcan flyout. */ closeFlyout(): void; /** * Hides the component. Called in WorkspaceSvg.hideChaff. * * @param onlyClosePopups Whether only popups should be closed. * Flyouts should not be closed if this is true. */ autoHide(onlyClosePopups: boolean): void; /** * Empties the trashcan's contents. If the contents-flyout is currently open * it will be closed. */ emptyContents(): void; /** * Positions the trashcan. * It is positioned in the opposite corner to the corner the * categories/toolbox starts at. * * @param metrics The workspace metrics. * @param savedPositions List of rectangles that are already on the workspace. */ position(metrics: UiMetrics, savedPositions: Rect[]): void; /** * Returns the bounding rectangle of the UI element in pixel units relative to * the Blockly injection div. * * @returns The UI elements's bounding box. Null if bounding box should be * ignored by other UI elements. */ getBoundingRectangle(): Rect | null; /** * Returns the bounding rectangle of the drag target area in pixel units * relative to viewport. * * @returns The component's bounding box. Null if drag target area should be * ignored. */ getClientRect(): Rect | null; /** * Handles when a cursor with a block or bubble is dragged over this drag * target. * * @param _dragElement The block or bubble currently being dragged. */ onDragOver(_dragElement: IDraggable): void; /** * Handles when a cursor with a block or bubble exits this drag target. * * @param _dragElement The block or bubble currently being dragged. */ onDragExit(_dragElement: IDraggable): void; /** * Handles when a block or bubble is dropped on this component. * Should not handle delete here. * * @param _dragElement The block or bubble currently being dragged. */ onDrop(_dragElement: IDraggable): void; /** * Flip the lid open or shut. * * @param state True if open. * @internal */ setLidOpen(state: boolean): void; /** Rotate the lid open or closed by one step. Then wait and recurse. */ private animateLid; /** * Set the angle of the trashcan's lid. * * @param lidAngle The angle at which to set the lid. */ private setLidAngle; /** * Sets the minimum openness of the trashcan lid. If the lid is currently * closed, this will update lid's position. * * @param newMin The new minimum openness of the lid. Should be between 0 * and 1. */ private setMinOpenness; /** * Flip the lid shut. * Called externally after a drag. */ closeLid(): void; /** Inspect the contents of the trash. */ click(): void; /** * Fires a UI event for trashcan flyout open or close. * * @param trashcanOpen Whether the flyout is opening. */ private fireUiEvent; /** * Prevents a workspace scroll and click event if the trashcan has blocks. * * @param e A mouse down event. */ private blockMouseDownWhenOpenable; /** * Indicate that the trashcan can be clicked (by opening it) if it has blocks. */ private mouseOver; /** * Close the lid of the trashcan if it was open (Vis. it was indicating it had * blocks). */ private mouseOut; /** * Handle a BLOCK_DELETE event. Adds deleted blocks oldXml to the content * array. * * @param event Workspace event. */ private onDelete; /** * Converts JSON representing a block into text that can be stored in the * content array. * * @param json A JSON representation of a block's state. * @returns A BlockInfo object corresponding to the JSON, cleaned of all * unnecessary attributes. */ private cleanBlockJson; } //# sourceMappingURL=trashcan.d.ts.map