mirror of
https://github.com/google/blockly.git
synced 2026-01-08 17:40:09 +01:00
* feat: Add interfaces for keyboard navigation. * feat: Add the Navigator. * feat: Make core types conform to INavigable. * feat: Require FlyoutItems elements to be INavigable. * feat: Add navigation policies for built-in types. * refactor: Convert Marker and LineCursor to operate on INavigables instead of ASTNodes. * chore: Delete dead code in ASTNode. * fix: Fix the tests. * chore: Assuage the linter. * fix: Fix advanced build/tests. * chore: Restore ASTNode tests. * refactor: Move isNavigable() validation into Navigator. * refactor: Exercise navigation instead of ASTNode. * chore: Rename astnode_test.js to navigation_test.js. * chore: Enable the navigation tests. * fix: Fix bug when retrieving the first child of an empty workspace.
32 lines
959 B
TypeScript
32 lines
959 B
TypeScript
/**
|
|
* @license
|
|
* Copyright 2025 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
/**
|
|
* Represents a UI element which can be navigated to using the keyboard.
|
|
*/
|
|
export interface INavigable<T> {
|
|
/**
|
|
* Returns whether or not this specific instance should be reachable via
|
|
* keyboard navigation.
|
|
*
|
|
* Implementors should generally return true, unless there are circumstances
|
|
* under which this item should be skipped while using keyboard navigation.
|
|
* Common examples might include being disabled, invalid, readonly, or purely
|
|
* a visual decoration. For example, while Fields are navigable, non-editable
|
|
* fields return false, since they cannot be interacted with when focused.
|
|
*
|
|
* @returns True if this element should be included in keyboard navigation.
|
|
*/
|
|
isNavigable(): boolean;
|
|
|
|
/**
|
|
* Returns the class of this instance.
|
|
*
|
|
* @returns This object's class.
|
|
*/
|
|
getClass(): new (...args: any) => T;
|
|
}
|