@ozen-ui/kit
Version:
React component library
44 lines (43 loc) • 1.73 kB
JavaScript
import { __read } from "tslib";
import { useBoolean } from '../../../../hooks/useBoolean';
import { useClickOutside } from '../../../../hooks/useClickOutside';
import { useEventListener } from '../../../../hooks/useEventListener';
import { getFocusableElements } from '../../../../utils/getFocusableElements';
import { isKey } from '../../../../utils/isKey';
export var useCalendarKeyboard = function (_a) {
var controlRef = _a.controlRef, calendarRef = _a.calendarRef, _b = _a.active, active = _b === void 0 ? false : _b;
var _c = __read(useBoolean(false), 2), focused = _c[0], _d = _c[1], on = _d.on, off = _d.off;
useClickOutside({
refs: [calendarRef],
active: focused,
handler: function () {
var _a;
(_a = controlRef.current) === null || _a === void 0 ? void 0 : _a.focus();
off();
},
});
useEventListener({
element: controlRef,
eventName: 'keydown',
handler: function (event) {
if (isKey(event, 'Tab') && calendarRef.current) {
event.preventDefault();
var _a = __read(getFocusableElements(calendarRef.current), 1), firstFocusableElements = _a[0];
firstFocusableElements === null || firstFocusableElements === void 0 ? void 0 : firstFocusableElements.focus();
on();
}
},
active: active && !focused,
});
useEventListener({
eventName: 'keydown',
handler: function (event) {
if (isKey(event, 'Escape') && controlRef.current) {
controlRef.current.focus();
off();
}
},
active: focused,
});
return focused;
};