@progress/kendo-react-data-tools
Version:
Includes React Pager & React Filter component, an intuitive interface to create complex filter descriptions. KendoReact Data Tools package
248 lines (247 loc) • 9.02 kB
JavaScript
/**
* @license
*-------------------------------------------------------------------------------------------
* Copyright © 2026 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the package root for more information
*-------------------------------------------------------------------------------------------
*/
import { FOCUSABLE_ELEMENTS as A, TABBABLE_ELEMENTS as k } from "@progress/kendo-react-common";
import { KEYBOARD_NAV_DATA_LEVEL as f, KEYBOARD_NAV_DATA_ID as g, KEYBOARD_NAV_DATA_SCOPE as D, KEYBOARD_NAV_CANCEL_BUTTON_CLASS as B, KEYBOARD_NAV_EDIT_BUTTON_CLASS as w, KEYBOARD_NAV_DATA_HEADER as h, KEYBOARD_NAV_DATA_BODY as T, KEYBOARD_NAV_FILTER_COL_SUFFIX as $ } from "./constants.mjs";
const F = (e, t, r = "cell") => `${t}_${e}_${r}`, q = (e) => {
if (e)
return parseInt(e.getAttribute(f) || "", 10);
}, m = (e) => {
if (!e)
return;
const t = e.getAttribute(g);
return t || void 0;
}, E = (e) => e ? !!e.getAttribute(g) : !1, L = (e, t = { level: 0 }) => e.querySelector(`[${f}='${t.level}']`), x = (e) => e && e.parentElement && e.parentElement.closest(`[${f}]`), I = (e, t) => e.querySelector(`[${g}='${t}']`), O = (e) => e && e.parentElement && e.parentElement.closest(`[${D}]`), R = (e) => {
var r;
const t = ((r = e == null ? void 0 : e.parentElement) == null ? void 0 : r.closest(".k-grid-edit-row")) || null;
return t == null ? void 0 : t.querySelector("." + B);
}, K = (e) => document.querySelector(`[aria-rowindex="${e}"] .k-grid-remove-command`), a = (e) => document.querySelector(`[data-keyboardnavid="${e}"]`), V = (e) => {
var n;
const t = e && e.parentElement && e.parentElement.closest(".k-table-row");
let r;
return (n = t == null ? void 0 : t.parentElement) == null || n.childNodes.forEach((l) => {
if (t === l) {
const o = l.previousSibling;
r = {
current: t.getAttribute("aria-rowindex"),
prev: o && o.getAttribute("aria-rowindex")
};
}
}), r;
};
async function p(e, t, r = 5e3) {
const n = Date.now();
if (t)
for (; Date.now() - n < r; ) {
const l = t.querySelector(e);
if (l)
return l;
await new Promise((o) => setTimeout(o, 20));
}
return !1;
}
const Y = async (e) => {
var n;
const t = ((n = e == null ? void 0 : e.parentElement) == null ? void 0 : n.closest(".k-grid-edit-row")) || null;
return await p("." + w, t);
}, P = (e) => (e == null ? void 0 : e.closest(".k-table-td")) || null, U = (e) => e.querySelector(`[${h}]`), W = (e) => e.querySelector(`[${T}]`), ue = (e) => e.querySelector(".k-grid-norecords"), ae = (e) => {
const t = e.querySelector(".k-grid-edit-cell"), r = t == null ? void 0 : t.querySelector("input");
r ? r.focus() : t && t.firstChild.focus();
}, j = (e, t) => {
const { scope: r, navigationStateRef: n, contextStateRef: l } = e;
if (!n.current || !r)
return;
const o = Z(n.current.navigationMatrix), s = I(r, o);
_({ elementForFocus: s, contextStateRef: l, event: t });
}, y = (e, t = { focusable: !1 }) => {
const r = t.focusable ? A : k;
return Array.from(e.querySelectorAll(r.join(",")));
}, H = (e, t = { level: 0 }) => {
if (!e)
return [];
const r = A.map((n) => n + `[${f}='${t.level}']`).join(",");
return Array.from(e.querySelectorAll(r));
}, M = (e = { level: 0 }) => {
const t = A.map((r) => r + `[${f}='${e.level}']`).join(",");
return (r) => r.matches(t);
}, _ = (e) => {
const { elementForFocus: t, event: r, contextStateRef: n, prevElement: l } = e;
if (n.current && t && t.focus) {
r == null || r.preventDefault();
const o = t.querySelector(".k-checkbox-wrap .k-checkbox");
o && o.focus ? o.focus() : t.focus(), E(t) && (t.setAttribute("tabIndex", "0"), n.current.activeId = m(t)), l && E(l) && l.setAttribute("tabIndex", "-1");
}
}, X = (e) => e.current ? e.current.idPrefix : "", z = (e, t, r, n, l) => {
if (!r)
return [];
let o = e + (l ? -1 : 1);
for (; o >= 0 && o < n.length; ) {
const s = n[o][t];
if (s !== r)
return [s, [o, t]];
o = o + (l ? -1 : 1);
}
return [];
}, d = (e, t, r, n, l) => {
if (!r)
return [];
let o = t + (l ? -1 : 1);
for (; o >= 0 && n[e] && o < n[e].length; ) {
const s = n[e][o];
if (s !== r)
return [s, [e, o]];
o = o + (l ? -1 : 1);
}
return [];
}, b = (e, t) => {
if (t) {
for (let r = 0; r < e.length; r++)
for (let n = 0; n < e[r].length; n++)
if (e[r][n] === t)
return [r, n];
}
}, v = (e, t, r) => {
let n;
do
if (e = e + 1, n = t[r - e], n && n.editable)
break;
while (r - e >= 0);
return n;
}, G = (e, t, r, n) => {
var C;
let l;
const [o, s] = e;
let c;
const i = 0, u = t.length;
return c = v(i, t, s), c ? l = d(o, c.ariaColumnIndex, r, n, !0) : (c = v(i, t, u), l = d(o - 1, c.ariaColumnIndex, r, n, !0)), {
prevCell: l && l[0] && a(l[0]),
elementToFocus: l && l[0] && ((C = a(l[0])) == null ? void 0 : C.getAttribute("role"))
};
}, N = (e, t, r) => {
let n;
do
if (e = e + 1, n = t[r + e], n && n.editable)
break;
while (r + e - 1 < t.length);
return n;
}, J = (e, t, r, n) => {
var o;
let l;
if (e) {
const [s, c] = e;
let i, u = 0;
i = N(u, t, c), i ? l = d(s, i.ariaColumnIndex, r, n, !0) : (u = -1, i = N(u, t, 0), l = d(s + 1, i.ariaColumnIndex, r, n, !0));
}
return {
nextCell: l && l[0] && a(l[0]),
elementToFocus: l && l[0] && ((o = a(l[0])) == null ? void 0 : o.getAttribute("role"))
};
}, Q = (e) => e.current ? e.current.navigationMatrix.length : 0, Z = (e) => e.flat().find((t) => t.endsWith("cell")), de = (e) => e.flat().reverse().find((t) => t.endsWith("cell")), fe = (e, t) => e[t][0], Ee = (e, t) => Array.from(e[t]).reverse()[0], ee = (e) => e ? `${e}${$}` : "", be = (e, t, r) => {
var l;
let n;
if ((l = e.current) != null && l.prevNavigationIndexes) {
const [o, s] = e.current.prevNavigationIndexes, c = t[o];
c && c[s] === r ? n = e.current.prevNavigationIndexes : n = b(t, r);
} else
n = b(t, r);
return n;
}, te = (e) => {
var t;
return ((t = x(e)) == null ? void 0 : t.getAttribute("data-keyboardnavid")) || e.getAttribute("data-keyboardnavid");
}, re = (e) => e.closest(".k-grid-stack-cell"), S = (e) => y(e, { focusable: !0 }), ne = (e, t) => {
var o;
const r = e.closest(".k-table-td");
if (!r)
return null;
const n = Array.from(r.querySelectorAll(".k-grid-stack-cell")), l = n.indexOf(e);
return l === -1 ? null : t === "next" ? l < n.length - 1 ? n[l + 1] : n[0] : l > 0 ? n[l - 1] : (o = n.at(-1)) != null ? o : null;
}, le = (e) => e.closest(".k-table-td, td.k-table-td[tabindex]"), oe = (e, t = 0) => {
const r = S(e);
r.length > 0 ? (r[t] || r[0]).focus() : e.focus();
}, Ae = {
generateNavigatableId: F,
getNavigatableId: m,
getNavigatableLevel: q,
getNavigatableElement: L,
getClosestNavigatableElement: x,
getActiveNavDataElement: I,
getClosestScope: O,
getHeaderElement: U,
getBodyElement: W,
getFocusableElements: y,
getNavigatableElements: H,
filterNavigatableElements: M,
focusElement: _,
getIdPrefix: X,
isNavigatable: E,
findNextIdByRowIndex: z,
findNextIdByCellIndex: d,
findId: b,
getNextNavigationIndex: Q,
getFilterColumnId: ee,
focusFirstDataElement: j,
getClosestCancelButton: R,
getClosestEditButton: Y,
getRowAriaRowIndex: V,
getRemoveButtonByAriaRowIndex: K,
getTableCellByKeyboardNavId: a,
getParentCell: P,
waitForElementToBeVisible: p,
getNextEditableCell: J,
getPrevEditableCell: G,
getClosestCellNavId: te,
getStackedCellWrapper: re,
getStackedCellFocusableElements: S,
getNextStackedCell: ne,
getStackedCellContainer: le,
focusStackedCellElement: oe
};
export {
M as filterNavigatableElements,
b as findId,
d as findNextIdByCellIndex,
z as findNextIdByRowIndex,
_ as focusElement,
j as focusFirstDataElement,
ae as focusFirstEditor,
oe as focusStackedCellElement,
F as generateNavigatableId,
I as getActiveNavDataElement,
W as getBodyElement,
R as getClosestCancelButton,
te as getClosestCellNavId,
Y as getClosestEditButton,
x as getClosestNavigatableElement,
O as getClosestScope,
be as getCurrentIdIndexes,
ee as getFilterColumnId,
Z as getFirstDataCell,
fe as getFirstRowDataCell,
y as getFocusableElements,
U as getHeaderElement,
X as getIdPrefix,
de as getLastDataCell,
Ee as getLastRowDataCell,
L as getNavigatableElement,
H as getNavigatableElements,
m as getNavigatableId,
q as getNavigatableLevel,
J as getNextEditableCell,
Q as getNextNavigationIndex,
ne as getNextStackedCell,
ue as getNoRecordsElement,
P as getParentCell,
G as getPrevEditableCell,
K as getRemoveButtonByAriaRowIndex,
V as getRowAriaRowIndex,
le as getStackedCellContainer,
S as getStackedCellFocusableElements,
re as getStackedCellWrapper,
a as getTableCellByKeyboardNavId,
E as isNavigatable,
Ae as tableKeyboardNavigationTools
};