@ariakit/react-core
Version:
Ariakit React core
80 lines (63 loc) • 2.64 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true});
var _M6LCPEQRcjs = require('../__chunks/M6LCPEQR.cjs');
require('../__chunks/Y35J4OLV.cjs');
var _6TI3NXX6cjs = require('../__chunks/6TI3NXX6.cjs');
var _L5A2ID7Scjs = require('../__chunks/L5A2ID7S.cjs');
require('../__chunks/FDRJDQ5Y.cjs');
var _7EQBAZ46cjs = require('../__chunks/7EQBAZ46.cjs');
// src/focus-trap/focus-trap-region.tsx
var _focus = require('@ariakit/core/utils/focus');
var _misc = require('@ariakit/core/utils/misc');
var _react = require('react');
var _jsxruntime = require('react/jsx-runtime');
var TagName = "div";
var useFocusTrapRegion = _6TI3NXX6cjs.createHook.call(void 0,
function useFocusTrapRegion2(_a) {
var _b = _a, { enabled = false } = _b, props = _7EQBAZ46cjs.__objRest.call(void 0, _b, ["enabled"]);
const ref = _react.useRef.call(void 0, null);
props = _L5A2ID7Scjs.useWrapElement.call(void 0,
props,
(element) => {
const renderFocusTrap = () => {
if (!enabled) return null;
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_M6LCPEQRcjs.FocusTrap,
{
onFocus: (event) => {
const container = ref.current;
if (!container) return;
const tabbables = _focus.getAllTabbableIn.call(void 0, container, true);
const first = tabbables[0];
const last = tabbables[tabbables.length - 1];
if (!tabbables.length) {
container.focus();
return;
}
if (event.relatedTarget === first) {
last == null ? void 0 : last.focus();
} else {
first == null ? void 0 : first.focus();
}
}
}
);
};
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
renderFocusTrap(),
element,
renderFocusTrap()
] });
},
[enabled]
);
props = _7EQBAZ46cjs.__spreadProps.call(void 0, _7EQBAZ46cjs.__spreadValues.call(void 0, {}, props), {
ref: _L5A2ID7Scjs.useMergeRefs.call(void 0, ref, props.ref)
});
return _misc.removeUndefinedValues.call(void 0, props);
}
);
var FocusTrapRegion = _6TI3NXX6cjs.forwardRef.call(void 0, function FocusTrapRegion2(props) {
const htmlProps = useFocusTrapRegion(props);
return _6TI3NXX6cjs.createElement.call(void 0, TagName, htmlProps);
});
exports.FocusTrapRegion = FocusTrapRegion; exports.useFocusTrapRegion = useFocusTrapRegion;