UNPKG

@ozen-ui/kit

Version:

React component library

44 lines (43 loc) 1.73 kB
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; };