@ozen-ui/kit
Version:
React component library
48 lines (47 loc) • 2.05 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.useCalendarKeyboard = void 0;
var tslib_1 = require("tslib");
var useBoolean_1 = require("../../../../hooks/useBoolean");
var useClickOutside_1 = require("../../../../hooks/useClickOutside");
var useEventListener_1 = require("../../../../hooks/useEventListener");
var getFocusableElements_1 = require("../../../../utils/getFocusableElements");
var isKey_1 = require("../../../../utils/isKey");
var useCalendarKeyboard = function (_a) {
var controlRef = _a.controlRef, calendarRef = _a.calendarRef, _b = _a.active, active = _b === void 0 ? false : _b;
var _c = tslib_1.__read((0, useBoolean_1.useBoolean)(false), 2), focused = _c[0], _d = _c[1], on = _d.on, off = _d.off;
(0, useClickOutside_1.useClickOutside)({
refs: [calendarRef],
active: focused,
handler: function () {
var _a;
(_a = controlRef.current) === null || _a === void 0 ? void 0 : _a.focus();
off();
},
});
(0, useEventListener_1.useEventListener)({
element: controlRef,
eventName: 'keydown',
handler: function (event) {
if ((0, isKey_1.isKey)(event, 'Tab') && calendarRef.current) {
event.preventDefault();
var _a = tslib_1.__read((0, getFocusableElements_1.getFocusableElements)(calendarRef.current), 1), firstFocusableElements = _a[0];
firstFocusableElements === null || firstFocusableElements === void 0 ? void 0 : firstFocusableElements.focus();
on();
}
},
active: active && !focused,
});
(0, useEventListener_1.useEventListener)({
eventName: 'keydown',
handler: function (event) {
if ((0, isKey_1.isKey)(event, 'Escape') && controlRef.current) {
controlRef.current.focus();
off();
}
},
active: focused,
});
return focused;
};
exports.useCalendarKeyboard = useCalendarKeyboard;
;