UNPKG

@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
/** * @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 };