mirror of
https://github.com/google/blockly.git
synced 2026-01-04 23:50:12 +01:00
* chore: remove suppress annotations * chore: remove fileoverview annotation * chore: remove other unused annotations * chore: change return to returns * chore: enable tag linting
106 lines
2.9 KiB
TypeScript
106 lines
2.9 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2023 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import type {Coordinate} from '../utils/coordinate.js';
|
|
import type {Size} from '../utils/size.js';
|
|
|
|
export interface IIcon {
|
|
/**
|
|
* @returns the string representing the type of the icon.
|
|
* E.g. 'comment', 'warning', etc. This string should also be used when
|
|
* registering the icon class.
|
|
*/
|
|
getType(): string;
|
|
|
|
/**
|
|
* Creates the SVG elements for the icon that will live on the block.
|
|
*
|
|
* @param pointerdownListener An event listener that must be attached to the
|
|
* root SVG element by the implementation of `initView`. Used by Blockly's
|
|
* gesture system to properly handle clicks and drags.
|
|
*/
|
|
initView(pointerdownListener: (e: PointerEvent) => void): void;
|
|
|
|
/**
|
|
* Disposes of any elements of the icon.
|
|
*
|
|
* @remarks
|
|
*
|
|
* In particular, if this icon is currently showing a bubble, this should be
|
|
* used to hide it.
|
|
*/
|
|
dispose(): void;
|
|
|
|
/**
|
|
* @returns the "weight" of the icon, which determines the static order which
|
|
* icons should be rendered in. More positive numbers are rendered farther
|
|
* toward the end of the block.
|
|
*/
|
|
getWeight(): number;
|
|
|
|
/** @returns The dimensions of the icon for use in rendering. */
|
|
getSize(): Size;
|
|
|
|
/** Updates the icon's color when the block's color changes.. */
|
|
applyColour(): void;
|
|
|
|
/** Hides the icon when it is part of an insertion marker. */
|
|
hideForInsertionMarker(): void;
|
|
|
|
/** Updates the icon's editability when the block's editability changes. */
|
|
updateEditable(): void;
|
|
|
|
/**
|
|
* Updates the icon's collapsed-ness/view when the block's collapsed-ness
|
|
* changes.
|
|
*/
|
|
updateCollapsed(): void;
|
|
|
|
/**
|
|
* @returns Whether this icon is shown when the block is collapsed. Used
|
|
* to allow renderers to account for padding.
|
|
*/
|
|
isShownWhenCollapsed(): boolean;
|
|
|
|
/**
|
|
* Notifies the icon where it is relative to its block's top-start, in
|
|
* workspace units.
|
|
*/
|
|
setOffsetInBlock(offset: Coordinate): void;
|
|
|
|
/**
|
|
* Notifies the icon that it has changed locations.
|
|
*
|
|
* @param blockOrigin The location of this icon's block's top-start corner
|
|
* in workspace coordinates.
|
|
*/
|
|
onLocationChange(blockOrigin: Coordinate): void;
|
|
|
|
/**
|
|
* Notifies the icon that it has been clicked.
|
|
*/
|
|
onClick(): void;
|
|
}
|
|
|
|
/** Type guard that checks whether the given object is an IIcon. */
|
|
export function isIcon(obj: any): obj is IIcon {
|
|
return (
|
|
obj.getType !== undefined &&
|
|
obj.initView !== undefined &&
|
|
obj.dispose !== undefined &&
|
|
obj.getWeight !== undefined &&
|
|
obj.getSize !== undefined &&
|
|
obj.applyColour !== undefined &&
|
|
obj.hideForInsertionMarker !== undefined &&
|
|
obj.updateEditable !== undefined &&
|
|
obj.updateCollapsed !== undefined &&
|
|
obj.isShownWhenCollapsed !== undefined &&
|
|
obj.setOffsetInBlock !== undefined &&
|
|
obj.onLocationChange !== undefined &&
|
|
obj.onClick !== undefined
|
|
);
|
|
}
|