UNPKG

@progress/kendo-vue-common

Version:

Kendo UI for Vue Common Utilities package

67 lines (66 loc) 2.42 kB
/** * @license *------------------------------------------------------------------------------------------- * Copyright © 2025 Progress Software Corporation. All rights reserved. * Licensed under commercial license. See LICENSE.md in the package root for more information *------------------------------------------------------------------------------------------- */ const i = [ "input:not([disabled]):not([type=hidden])", "select:not([disabled])", "textarea:not([disabled])", "button:not([disabled])", "a[href]", "area[href]", "summary", "iframe", "object", "embed", "audio[controls]", "video[controls]", "[contenteditable]" ]; class a { constructor(t) { this.rovingTabIndex = !0, this.update = () => { }, this.focusNextIndex = (e, n) => { const s = this.elements; let o = s.indexOf(e) + n; o = o < 0 ? s.length - 1 : o, this.focusElement(s[o % s.length], e); }, this.tabIndex = t.tabIndex || 0, this.root = t.root, this.selectors = t.selectors, this.rovingTabIndex = t.rovingTabIndex !== void 0 ? t.rovingTabIndex : !0, this.mouseEvents = t.mouseEvents || {}, this.keyboardEvents = t.keyboardEvents || {}; } get elements() { return this.root ? Array.from(this.root.querySelectorAll(this.selectors.join(","))) : []; } get first() { return this.root && this.root.querySelector(this.selectors.join(",")) || null; } get last() { const t = this.elements; return t[t.length - 1] || null; } get current() { return this.elements.find((t) => t.matches(":focus")) || null; } focusNext(t) { this.focusNextIndex(t, 1); } focusPrevious(t) { this.focusNextIndex(t, -1); } triggerKeyboardEvent(t) { const e = t.target instanceof Element && t.target.closest(this.selectors.join(",")), n = t.key === " " ? "Space" : t.key, s = t.type; e && this.keyboardEvents[s][n] && this.keyboardEvents[s][n].call(void 0, e, this, t); } triggerMouseEvent(t) { const e = t.target instanceof Element && t.target.closest(this.selectors.join(",")), n = t.type; e && this.mouseEvents[n].call(void 0, e, this, t); } focusElement(t, e) { t && (e && (this.rovingTabIndex && e.removeAttribute("tabindex"), e.classList.remove("k-focus")), this.rovingTabIndex && t.setAttribute("tabindex", String(this.tabIndex)), t.focus({ preventScroll: !0 })); } } export { i as FOCUSABLE_ELEMENTS, a as Navigation };