blockly
Version:
Blockly is a library for building visual programming editors.
212 lines • 6.69 kB
TypeScript
/**
* @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