@ark-ui/solid
Version:
A collection of unstyled, accessible UI components for Solid, utilizing state machines for seamless interaction.
37 lines (34 loc) • 933 B
JSX
import {
composeRefs
} from "./PT2CJE3O.jsx";
import {
createSplitProps
} from "./6WEDGJKQ.jsx";
import {
ark
} from "./UFYZ7HLU.jsx";
// src/components/focus-trap/focus-trap.tsx
import { trapFocus } from "@zag-js/focus-trap";
import { createEffect, onCleanup } from "solid-js";
var FocusTrap = (props) => {
let localNode;
const [trapProps, localProps] = createSplitProps()(props, [
"disabled",
"onActivate",
"onDeactivate",
"initialFocus",
"fallbackFocus",
"returnFocusOnDeactivate",
"setReturnFocus"
]);
createEffect(() => {
if (!localNode || trapProps.disabled) return;
const autoFocusNode = localNode.querySelector("[autofocus], [data-autofocus]");
trapProps.initialFocus ||= autoFocusNode ?? void 0;
onCleanup(trapFocus(localNode, trapProps));
});
return <ark.div {...localProps} ref={composeRefs((el) => localNode = el, props.ref)} />;
};
export {
FocusTrap
};