mirror of
https://github.com/google/blockly.git
synced 2025-12-15 22:00:07 +01:00
* refactor: Remove INavigable in favor of IFocusableNode. * chore: Fix JSDoc. * chore: Address review feedback.
95 lines
2.2 KiB
TypeScript
95 lines
2.2 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2024 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import type {IBoundedElement} from './interfaces/i_bounded_element.js';
|
|
import type {IFocusableNode} from './interfaces/i_focusable_node.js';
|
|
import type {IFocusableTree} from './interfaces/i_focusable_tree.js';
|
|
import {Rect} from './utils/rect.js';
|
|
|
|
/**
|
|
* Representation of a gap between elements in a flyout.
|
|
*/
|
|
export class FlyoutSeparator implements IBoundedElement, IFocusableNode {
|
|
private x = 0;
|
|
private y = 0;
|
|
|
|
/**
|
|
* Creates a new separator.
|
|
*
|
|
* @param gap The amount of space this separator should occupy.
|
|
* @param axis The axis along which this separator occupies space.
|
|
*/
|
|
constructor(
|
|
private gap: number,
|
|
private axis: SeparatorAxis,
|
|
) {}
|
|
|
|
/**
|
|
* Returns the bounding box of this separator.
|
|
*
|
|
* @returns The bounding box of this separator.
|
|
*/
|
|
getBoundingRectangle(): Rect {
|
|
switch (this.axis) {
|
|
case SeparatorAxis.X:
|
|
return new Rect(this.y, this.y, this.x, this.x + this.gap);
|
|
case SeparatorAxis.Y:
|
|
return new Rect(this.y, this.y + this.gap, this.x, this.x);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Repositions this separator.
|
|
*
|
|
* @param dx The distance to move this separator on the X axis.
|
|
* @param dy The distance to move this separator on the Y axis.
|
|
* @param _reason The reason this move was initiated.
|
|
*/
|
|
moveBy(dx: number, dy: number, _reason?: string[]) {
|
|
this.x += dx;
|
|
this.y += dy;
|
|
}
|
|
|
|
/**
|
|
* Returns false to prevent this separator from being navigated to by the
|
|
* keyboard.
|
|
*
|
|
* @returns False.
|
|
*/
|
|
isNavigable() {
|
|
return false;
|
|
}
|
|
|
|
/** See IFocusableNode.getFocusableElement. */
|
|
getFocusableElement(): HTMLElement | SVGElement {
|
|
throw new Error('Cannot be focused');
|
|
}
|
|
|
|
/** See IFocusableNode.getFocusableTree. */
|
|
getFocusableTree(): IFocusableTree {
|
|
throw new Error('Cannot be focused');
|
|
}
|
|
|
|
/** See IFocusableNode.onNodeFocus. */
|
|
onNodeFocus(): void {}
|
|
|
|
/** See IFocusableNode.onNodeBlur. */
|
|
onNodeBlur(): void {}
|
|
|
|
/** See IFocusableNode.canBeFocused. */
|
|
canBeFocused(): boolean {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Representation of an axis along which a separator occupies space.
|
|
*/
|
|
export const enum SeparatorAxis {
|
|
X = 'x',
|
|
Y = 'y',
|
|
}
|