* refactor!: Merge `Marker`, `LineCursor` and `Navigator`
* refactor!: Use the Navigator to traverse the toolbox and flyout.
* feat: Register keyboard shortcuts for navigation
* test: Fix and add tests
* chore: Export `ToolboxNavigator`
* chore: Make the linter happy
* chore: Reorganize files
* chore: Fix docstrings
* chore: Fix variable names
* fix: Focus the flyout on T for simple toolboxes
* test: Add tests for focus toolbox shortcut
* refactor: Remove `WorkspaceSvg.keyboardAccessibilityMode`
* refactor: Simplify navigation logic
* fix: Fix tests
* chore: Normalize imports
* fix: Fix bad merge resolution
* fix: Fix docstrings
* fix: Fix navigation down on blocks with a statement input and no next connection
* fix: Be more defensive about navigating to connections
* fix: Use FlyoutButton IDs as row IDs
* feat: aria live region for announcements
* fix: code review and add tests
* fix: better suite name
* chore: remove unused function
* fix: code review changes
* chore: add back ability to remove role
* feat: Move mode for stacks of blocks
* lint; add tests
* push to remote in order to switch devices (tests still failing)
* fix tests
* code review test updates
* feat: Add keyboard shortcut to focus the workspace
* test: Added tests for keyboard shortcut to focus workspace
* fix: Disable the focus workspace shortcut while dragging
* feat!: Allow using Blockly in web components/shadow DOM
* test: Fix tests
* chore: Add a playground to exercise web component support
* fix: Remove JSDoc argument
* chore: Format playground
* fix: Hopefully fix tests in CI
* fix: Improve test performance
* fix: Fix test failure
* fix: Allow changing the theme
* refactor!: Move responsibility for block creation out of flyouts
* chore: Clarify naming and documentation
* fix: Make test less convoluted
* refactor: Use serialization instead of zero-length drag to handle block clicks
* fix: Fix undoing when dragging a block from the flyout
* refactor: Make `getTargetBlock()` always return a value
* refactor!: Update dragging APIs.
* fix: Fix bug that caused drags to always result in deletion
* refactor: Clean up block drag handling with new API
* chore: Format files
* feat: Add an `isBoundedElement` type predicate
* feat: Make `Bubble` implement `IBoundedElement`
* fix: Fix jumping/scrolling when moving blocks
* feat: Add a `KeyboardMover`
* feat: Update the `BlockDragStrategy` to support constrained movement
* feat: Register keyboard shortcuts to drive movement
* feat: Display a move indicator on items that are being moved
* fix: Reenable move hints
* fix: Fix bugs that caused elements to be mispositioned by keyboard moves at non-default zoom levels
* fix: Fix a bug that caused certain connections to be visited out of order
* fix: Fix a bug that caused blocks to become disconnected during constrained moves
* test: Add tests for keyboard-driven movement
* chore: Add exports
* chore: Run formatter
* chore: Make the linter happy
* chore: Update closure compiler
* fix: Fix test suite on non-macOS
* fix: Don't scroll in response to arrow keys while moving items
* fix: Fix positioning of move indicator in RTL
* refactor: Clarify return types of drag-start related methods
* refactor: Make the `KeyboardMover` a singleton
* fix: Fix import path
* refactor: Remove `WorkspaceSvg.keyboardMoveInProgress`
* fix: Fix tests
* chore: Remove unused import
* chore: Clean up comments and names
* refactor: Make `IDraggable` extend `IBoundedElement` and `ISelectable`
* chore: Rename test blocks file for move mode
* refactor: Make block connection offset a constant
* refactor: Export `KeyboardMover` class with a static instance
* fix: Use Command and Control as modifiers for unconstrained move mode
* fix: Fix test failures in CI
* feat: Support allowlisting keyboard shortcuts for mid-move use
* feat: Add support for getting the contextual menu
* feat: Add a keyboard shortcut for opening the contextual menu
* test: Add tests for `ContextMenu.getMenu()`.
* test: Add tests for context menu keyboard shortcut
* fix: Fix tests when not run on their own
* chore: Add type annotation
* fix: Focus the nearest neighbor on block deletion
* test: Add tests
* fix: Use `strictEqual`
* chore: Reduce the number of test blocks
* fix: Explicitly verify that dying blocks are not focused
* fix: Fix exception when disposing of a workspace with a focused block
* chore: Run formatter