@ark-ui/react
Version:
A collection of unstyled, accessible UI components for React, utilizing state machines for seamless interaction.
35 lines (30 loc) • 1.21 kB
JavaScript
'use client';
;
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const jsxRuntime = require('react/jsx-runtime');
const focusTrap = require('@zag-js/focus-trap');
const react = require('react');
const composeRefs = require('../../utils/compose-refs.cjs');
const createSplitProps = require('../../utils/create-split-props.cjs');
const useSafeLayoutEffect = require('../../utils/use-safe-layout-effect.cjs');
const factory = require('../factory.cjs');
const FocusTrap = react.forwardRef((props, ref) => {
const localRef = react.useRef(null);
const [trapProps, localProps] = createSplitProps.createSplitProps()(props, [
"disabled",
"onActivate",
"onDeactivate",
"initialFocus",
"fallbackFocus",
"returnFocusOnDeactivate",
"setReturnFocus"
]);
useSafeLayoutEffect.useSafeLayoutEffect(() => {
const node = localRef.current;
if (!node || trapProps.disabled) return;
return focusTrap.trapFocus(node, trapProps);
}, [ref, trapProps]);
return /* @__PURE__ */ jsxRuntime.jsx(factory.ark.div, { ref: composeRefs.composeRefs(localRef, ref), ...localProps });
});
FocusTrap.displayName = "FocusTrap";
exports.FocusTrap = FocusTrap;