@payfit/unity-components
Version:
84 lines (83 loc) • 2.46 kB
JavaScript
import { useCallback as e, useEffect as t, useRef as n } from "react";
import { useId as r } from "react-aria/useId";
import "embla-carousel-accessibility";
//#region src/components/carousel/hooks/useCarouselAccessibility.ts
function i({ api: i, visibleSlideIndexes: a, focusedSlideIndex: o, loop: s = !1, goToSlide: c }) {
let l = n(null), u = n(!1), d = r(), f = {
root: `carousel-${d}__root`,
title: `carousel-${d}__title`,
track: `carousel-${d}__track`,
previousButton: `carousel-${d}__previous-button`,
nextButton: `carousel-${d}__next-button`
};
return t(() => {
if (!i) return;
let e = i.plugins().accessibility;
!e || !l.current || e.setupLiveRegion(l.current);
}, [i]), t(() => {
if (!i) return;
let e = i.slideNodes();
e.forEach((e, t) => {
t === o ? (e.setAttribute("tabindex", "0"), e.removeAttribute("inert")) : (e.setAttribute("tabindex", "-1"), a.has(t) ? e.removeAttribute("inert") : e.setAttribute("inert", ""));
}), u.current && o !== null && (u.current = !1, e[o]?.focus({ preventScroll: !0 }));
}, [
i,
a,
o
]), {
liveRegionRef: l,
a11yIds: f,
onKeyDown: e((e) => {
if (!i) return;
let t = i.slideNodes().length, n = o ?? 0;
switch (e.key) {
case "ArrowLeft": {
e.preventDefault();
let r = n > 0 ? n - 1 : s ? t - 1 : n;
r !== n && (u.current = !0, c(r));
break;
}
case "ArrowRight": {
e.preventDefault();
let r = n < t - 1 ? n + 1 : s ? 0 : n;
r !== n && (u.current = !0, c(r));
break;
}
case "Home":
e.preventDefault(), s || (u.current = !0, c(0));
break;
case "End":
if (e.preventDefault(), !s) {
let e = t - 1;
u.current = !0, c(e);
}
break;
case "PageUp": {
e.preventDefault();
let t = i.selectedSnap(), n = i.snapList().length, r = t > 0 ? t - 1 : s ? n - 1 : t;
if (r !== t) {
let e = i.internalEngine(), t = e.slidesToScroll.groupSlides(e.slideIndexes)[r]?.[0];
t !== void 0 && (u.current = !0, c(t));
}
break;
}
case "PageDown": {
e.preventDefault();
let t = i.selectedSnap(), n = t < i.snapList().length - 1 ? t + 1 : s ? 0 : t;
if (n !== t) {
let e = i.internalEngine(), t = e.slidesToScroll.groupSlides(e.slideIndexes)[n]?.[0];
t !== void 0 && (u.current = !0, c(t));
}
break;
}
}
}, [
i,
s,
o,
c
])
};
}
//#endregion
export { i as useCarouselAccessibility };