UNPKG

@uifabric/utilities

Version:

Fluent UI React utilities for building components.

45 lines 1.91 kB
import { getWindow } from './dom/getWindow'; import { isDirectionalKeyCode } from './keyboard'; import { setFocusVisibility } from './setFocusVisibility'; /** * Initializes the logic which: * * 1. Subscribes keydown and mousedown events. (It will only do it once per window, * so it's safe to call this method multiple times.) * 2. When the user presses directional keyboard keys, adds the 'ms-Fabric--isFocusVisible' classname * to the document body, removes the 'ms-Fabric-isFocusHidden' classname. * 3. When the user clicks a mouse button, adds the 'ms-Fabric-isFocusHidden' classname to the * document body, removes the 'ms-Fabric--isFocusVisible' classname. * * This logic allows components on the page to conditionally render focus treatments based on * the existence of global classnames, which simplifies logic overall. * * @param window - the window used to add the event listeners * @deprecated Use useFocusRects hook or FocusRects component instead. */ export function initializeFocusRects(window) { var _a; var win = (window || getWindow()); if (!win || ((_a = win.FabricConfig) === null || _a === void 0 ? void 0 : _a.disableFocusRects) === true) { return; } if (!win.__hasInitializeFocusRects__) { win.__hasInitializeFocusRects__ = true; win.addEventListener('mousedown', _onMouseDown, true); win.addEventListener('pointerdown', _onPointerDown, true); win.addEventListener('keydown', _onKeyDown, true); } } function _onMouseDown(ev) { setFocusVisibility(false, ev.target); } function _onPointerDown(ev) { if (ev.pointerType !== 'mouse') { setFocusVisibility(false, ev.target); } } function _onKeyDown(ev) { // eslint-disable-next-line deprecation/deprecation isDirectionalKeyCode(ev.which) && setFocusVisibility(true, ev.target); } //# sourceMappingURL=initializeFocusRects.js.map