devextreme
Version:
JavaScript/TypeScript Component Suite for Responsive Web Development
66 lines (63 loc) • 2.35 kB
JavaScript
/**
* DevExtreme (cjs/__internal/core/utils/m_selectors.js)
* Version: 25.2.7
* Build date: Tue May 05 2026
*
* Copyright (c) 2012 - 2026 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.tabbable = exports.focused = exports.focusable = exports.default = void 0;
var _dom_adapter = _interopRequireDefault(require("../../../core/dom_adapter"));
var _renderer = _interopRequireDefault(require("../../../core/renderer"));
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
default: e
}
}
const focusableFn = (element, tabIndex) => {
if (!visible(element)) {
return false
}
const nodeName = element.nodeName.toLowerCase();
const isTabIndexNotNaN = !isNaN(tabIndex);
const isDisabled = element.disabled;
const isDefaultFocus = /^(input|select|textarea|button|object|iframe)$/.test(nodeName);
const isHyperlink = "a" === nodeName;
let isFocusable;
const {
isContentEditable: isContentEditable
} = element;
if (isDefaultFocus || isContentEditable) {
isFocusable = !isDisabled
} else if (isHyperlink) {
isFocusable = element.href || isTabIndexNotNaN
} else {
isFocusable = isTabIndexNotNaN
}
return isFocusable
};
function visible(element) {
const $element = (0, _renderer.default)(element);
return $element.is(":visible") && "hidden" !== $element.css("visibility") && "hidden" !== $element.parents().css("visibility")
}
const focusable = (index, element) => focusableFn(element, (0, _renderer.default)(element).attr("tabIndex"));
exports.focusable = focusable;
const tabbable = (index, element) => {
const tabIndex = (0, _renderer.default)(element).attr("tabIndex");
return (isNaN(tabIndex) || tabIndex >= 0) && focusableFn(element, tabIndex)
};
exports.tabbable = tabbable;
const focused = $element => {
const element = (0, _renderer.default)($element).get(0);
return _dom_adapter.default.getActiveElement(element) === element
};
exports.focused = focused;
var _default = exports.default = {
focusable: focusable,
tabbable: tabbable,
focused: focused
};