dgz-ui
Version:
Custom ui library using React.js, Shadcn/ui, TailwindCSS, Typescript
181 lines (180 loc) • 5.74 kB
JavaScript
import * as s from "react";
import { c as p } from "./index-D_OzDH1f.js";
import { c as H } from "./index-DDavTYdK.js";
import { u as V } from "./index-l1ZGtt0d.js";
import { c as z } from "./index-Dmh__Tgi.js";
import { a as q, u as J } from "./index-rSIGk0ww.js";
import { P as G } from "./index-Do92jweN.js";
import { u as Q } from "./index-DwYXX2sM.js";
import { u as W } from "./index-Dz-GVg5i.js";
import { j as d } from "./jsx-runtime-C5mzlN2N.js";
var _ = "rovingFocusGroup.onEntryFocus", X = { bubbles: !1, cancelable: !0 }, I = "RovingFocusGroup", [y, N, Z] = H(I), [$, be] = z(
I,
[Z]
), [ee, oe] = $(I), O = s.forwardRef(
(e, r) => /* @__PURE__ */ d.jsx(y.Provider, { scope: e.__scopeRovingFocusGroup, children: /* @__PURE__ */ d.jsx(y.Slot, { scope: e.__scopeRovingFocusGroup, children: /* @__PURE__ */ d.jsx(te, { ...e, ref: r }) }) })
);
O.displayName = I;
var te = s.forwardRef((e, r) => {
const {
__scopeRovingFocusGroup: c,
orientation: o,
loop: T = !1,
dir: w,
currentTabStopId: v,
defaultCurrentTabStopId: C,
onCurrentTabStopIdChange: S,
onEntryFocus: m,
preventScrollOnEntryFocus: a = !1,
...b
} = e, F = s.useRef(null), g = V(r, F), R = W(w), [E, t] = J({
prop: v,
defaultProp: C ?? null,
onChange: S,
caller: I
}), [i, h] = s.useState(!1), u = Q(m), l = N(c), x = s.useRef(!1), [k, P] = s.useState(0);
return s.useEffect(() => {
const n = F.current;
if (n)
return n.addEventListener(_, u), () => n.removeEventListener(_, u);
}, [u]), /* @__PURE__ */ d.jsx(
ee,
{
scope: c,
orientation: o,
dir: R,
loop: T,
currentTabStopId: E,
onItemFocus: s.useCallback(
(n) => t(n),
[t]
),
onItemShiftTab: s.useCallback(() => h(!0), []),
onFocusableItemAdd: s.useCallback(
() => P((n) => n + 1),
[]
),
onFocusableItemRemove: s.useCallback(
() => P((n) => n - 1),
[]
),
children: /* @__PURE__ */ d.jsx(
G.div,
{
tabIndex: i || k === 0 ? -1 : 0,
"data-orientation": o,
...b,
ref: g,
style: { outline: "none", ...e.style },
onMouseDown: p(e.onMouseDown, () => {
x.current = !0;
}),
onFocus: p(e.onFocus, (n) => {
const L = !x.current;
if (n.target === n.currentTarget && L && !i) {
const D = new CustomEvent(_, X);
if (n.currentTarget.dispatchEvent(D), !D.defaultPrevented) {
const A = l().filter((f) => f.focusable), U = A.find((f) => f.active), B = A.find((f) => f.id === E), Y = [U, B, ...A].filter(
Boolean
).map((f) => f.ref.current);
M(Y, a);
}
}
x.current = !1;
}),
onBlur: p(e.onBlur, () => h(!1))
}
)
}
);
}), K = "RovingFocusGroupItem", j = s.forwardRef(
(e, r) => {
const {
__scopeRovingFocusGroup: c,
focusable: o = !0,
active: T = !1,
tabStopId: w,
children: v,
...C
} = e, S = q(), m = w || S, a = oe(K, c), b = a.currentTabStopId === m, F = N(c), { onFocusableItemAdd: g, onFocusableItemRemove: R, currentTabStopId: E } = a;
return s.useEffect(() => {
if (o)
return g(), () => R();
}, [o, g, R]), /* @__PURE__ */ d.jsx(
y.ItemSlot,
{
scope: c,
id: m,
focusable: o,
active: T,
children: /* @__PURE__ */ d.jsx(
G.span,
{
tabIndex: b ? 0 : -1,
"data-orientation": a.orientation,
...C,
ref: r,
onMouseDown: p(e.onMouseDown, (t) => {
o ? a.onItemFocus(m) : t.preventDefault();
}),
onFocus: p(e.onFocus, () => a.onItemFocus(m)),
onKeyDown: p(e.onKeyDown, (t) => {
if (t.key === "Tab" && t.shiftKey) {
a.onItemShiftTab();
return;
}
if (t.target !== t.currentTarget) return;
const i = se(t, a.orientation, a.dir);
if (i !== void 0) {
if (t.metaKey || t.ctrlKey || t.altKey || t.shiftKey) return;
t.preventDefault();
let u = F().filter((l) => l.focusable).map((l) => l.ref.current);
if (i === "last") u.reverse();
else if (i === "prev" || i === "next") {
i === "prev" && u.reverse();
const l = u.indexOf(t.currentTarget);
u = a.loop ? ce(u, l + 1) : u.slice(l + 1);
}
setTimeout(() => M(u));
}
}),
children: typeof v == "function" ? v({ isCurrentTabStop: b, hasTabStop: E != null }) : v
}
)
}
);
}
);
j.displayName = K;
var re = {
ArrowLeft: "prev",
ArrowUp: "prev",
ArrowRight: "next",
ArrowDown: "next",
PageUp: "first",
Home: "first",
PageDown: "last",
End: "last"
};
function ne(e, r) {
return r !== "rtl" ? e : e === "ArrowLeft" ? "ArrowRight" : e === "ArrowRight" ? "ArrowLeft" : e;
}
function se(e, r, c) {
const o = ne(e.key, c);
if (!(r === "vertical" && ["ArrowLeft", "ArrowRight"].includes(o)) && !(r === "horizontal" && ["ArrowUp", "ArrowDown"].includes(o)))
return re[o];
}
function M(e, r = !1) {
const c = document.activeElement;
for (const o of e)
if (o === c || (o.focus({ preventScroll: r }), document.activeElement !== c)) return;
}
function ce(e, r) {
return e.map((c, o) => e[(r + o) % e.length]);
}
var Fe = O, ge = j;
export {
ge as I,
Fe as R,
be as c
};