'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.focusKeyPressed = focusKeyPressed; exports.detectKeyboardFocus = detectKeyboardFocus; exports.listenForFocusKeys = listenForFocusKeys; var _keycode = require('keycode'); var _keycode2 = _interopRequireDefault(_keycode); var _warning = require('warning'); var _warning2 = _interopRequireDefault(_warning); var _contains = require('dom-helpers/query/contains'); var _contains2 = _interopRequireDefault(_contains); var _ownerDocument = require('dom-helpers/ownerDocument'); var _ownerDocument2 = _interopRequireDefault(_ownerDocument); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // weak var internal = { focusKeyPressed: false }; function focusKeyPressed(pressed) { if (typeof pressed !== 'undefined') { internal.focusKeyPressed = Boolean(pressed); } return internal.focusKeyPressed; } function detectKeyboardFocus(instance, element, callback) { var attempt = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1; process.env.NODE_ENV !== "production" ? (0, _warning2.default)(instance.keyboardFocusCheckTime, 'Material-UI: missing instance.keyboardFocusCheckTime') : void 0; process.env.NODE_ENV !== "production" ? (0, _warning2.default)(instance.keyboardFocusMaxCheckTimes, 'Material-UI: missing instance.keyboardFocusMaxCheckTimes') : void 0; instance.keyboardFocusTimeout = setTimeout(function () { var doc = (0, _ownerDocument2.default)(element); if (focusKeyPressed() && (doc.activeElement === element || (0, _contains2.default)(element, doc.activeElement))) { callback(); } else if (attempt < instance.keyboardFocusMaxCheckTimes) { detectKeyboardFocus(instance, element, callback, attempt + 1); } }, instance.keyboardFocusCheckTime); } var FOCUS_KEYS = ['tab', 'enter', 'space', 'esc', 'up', 'down', 'left', 'right']; function isFocusKey(event) { return FOCUS_KEYS.indexOf((0, _keycode2.default)(event)) !== -1; } var handleKeyUpEvent = function handleKeyUpEvent(event) { if (isFocusKey(event)) { internal.focusKeyPressed = true; } }; function listenForFocusKeys(win) { // The event listener will only be added once per window. // Duplicate event listeners will be ignored by addEventListener. // Also, this logic is client side only, we don't need a teardown. win.addEventListener('keyup', handleKeyUpEvent); }