UNPKG

office-ui-fabric-react

Version:

Reusable React components for building experiences for Office 365.

101 lines (100 loc) 3.85 kB
import * as React from 'react'; import { IFocusZone, IFocusZoneProps } from './FocusZone.types'; import { IPoint } from '../../Utilities'; export declare class FocusZone extends React.Component<IFocusZoneProps> implements IFocusZone { static defaultProps: IFocusZoneProps; private _disposables; private _root; private _id; /** The most recently focused child element. */ private _activeElement; /** * The index path to the last focused child element. */ private _lastIndexPath; /** * Flag to define when we've intentionally parked focus on the root element to temporarily * hold focus until items appear within the zone. */ private _isParked; /** The child element with tabindex=0. */ private _defaultFocusElement; private _focusAlignment; private _isInnerZone; private _parkedTabIndex; /** Used to allow us to move to next focusable element even when we're focusing on a input element when pressing tab */ private _processingTabKey; /** Used for testing purposes only. */ static getOuterZones(): number; constructor(props: IFocusZoneProps); componentDidMount(): void; componentDidUpdate(): void; componentWillUnmount(): void; render(): JSX.Element; /** * Sets focus to the first tabbable item in the zone. * @param forceIntoFirstElement - If true, focus will be forced into the first element, even * if focus is already in the focus zone. * @returns True if focus could be set to an active element, false if no operation was taken. */ focus(forceIntoFirstElement?: boolean): boolean; /** * Sets focus to a specific child element within the zone. This can be used in conjunction with * onBeforeFocus to created delayed focus scenarios (like animate the scroll position to the correct * location and then focus.) * @param element - The child element within the zone to focus. * @returns True if focus could be set to an active element, false if no operation was taken. */ focusElement(element: HTMLElement): boolean; /** * Forces horizontal alignment in the context of vertical arrowing to use specific point as the reference, rather than a center based on * the last horizontal motion. * @param point - the new reference point. */ setFocusAlignment(point: IPoint): void; private _evaluateFocusBeforeRender; private _onFocus; /** * When focus is in the zone at render time but then all focusable elements are removed, * we "park" focus temporarily on the root. Once we update with focusable children, we restore * focus to the closest path from previous. If the user tabs away from the parked container, * we restore focusability to the pre-parked state. */ private _setParkedFocus; private _onBlur; /** * Handle global tab presses so that we can patch tabindexes on the fly. */ private _onKeyDownCapture; private _onMouseDown; private _setActiveElement; /** * Handle the keystrokes. */ private _onKeyDown; /** * Walk up the dom try to find a focusable element. */ private _tryInvokeClickForFocusable; /** * Traverse to find first child zone. */ private _getFirstInnerZone; private _moveFocus; private _moveFocusDown; private _moveFocusUp; private _moveFocusLeft; private _moveFocusRight; private _setFocusAlignment; private _isImmediateDescendantOfZone; private _getOwnerZone; private _updateTabIndexes; private _isElementInput; private _shouldInputLoseFocus; private _shouldWrapFocus; /** * Returns true if the element is a descendant of the FocusZone through a React portal. */ private _portalContainsElement; private _getDocument; }