mirror of
https://github.com/google/blockly.git
synced 2026-01-08 09:30:06 +01:00
* feat!: Make bubbles, comments, and icons focusable * feat!: Make ISelectable and ICopyable focusable. * feat: Consolidate selection calls. Now everything is based on focus with selection only being used as a proxy. * feat: Invert responsibility for setSelected(). Now setSelected() is only for quasi-external use. * feat: Push up shadow check to getters. Needed new common-level helper. * chore: Lint fixes. * feat!: Allow IFocusableNode to disable focus. * chore: post-merge lint fixes * fix: Fix tests + text bubble focusing. This fixed then regressed a circular dependency causing the node and advanced compilation steps to fail. This investigation is ongoing. * fix: Clean up & fix imports. This ensures the node and advanced compilation test steps now pass. * fix: Lint fixes + revert commented out logic. * chore: Remove unnecessary cast. Addresses reviewer comment. * fix: Some issues and a bunch of clean-ups. This addresses a bunch of review comments, and fixes selecting workspace comments. * chore: Lint fix. * fix: Remove unnecessary shadow consideration. * chore: Revert import. * chore: Some doc updates & added a warn statement.
42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2019 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
// Former goog.module ID: Blockly.ISelectable
|
|
|
|
import type {Workspace} from '../workspace.js';
|
|
import {IFocusableNode, isFocusableNode} from './i_focusable_node.js';
|
|
|
|
/**
|
|
* The interface for an object that is selectable.
|
|
*
|
|
* Implementations are generally expected to use their implementations of
|
|
* onNodeFocus() and onNodeBlur() to call setSelected() with themselves and
|
|
* null, respectively, in order to ensure that selections are correctly updated
|
|
* and the selection change event is fired.
|
|
*/
|
|
export interface ISelectable extends IFocusableNode {
|
|
id: string;
|
|
|
|
workspace: Workspace;
|
|
|
|
/** Select this. Highlight it visually. */
|
|
select(): void;
|
|
|
|
/** Unselect this. Unhighlight it visually. */
|
|
unselect(): void;
|
|
}
|
|
|
|
/** Checks whether the given object is an ISelectable. */
|
|
export function isSelectable(obj: object): obj is ISelectable {
|
|
return (
|
|
typeof (obj as any).id === 'string' &&
|
|
(obj as any).workspace !== undefined &&
|
|
(obj as any).select !== undefined &&
|
|
(obj as any).unselect !== undefined &&
|
|
isFocusableNode(obj)
|
|
);
|
|
}
|