@ark-ui/solid
Version:
A collection of unstyled, accessible UI components for Solid, utilizing state machines for seamless interaction.
26 lines (23 loc) • 1.01 kB
JavaScript
import { composeRefs } from './ROP6QZQ7.js';
import { createSplitProps } from './ZMHI4GDJ.js';
import { ark } from './EPLBB4QN.js';
import { createComponent, mergeProps } from 'solid-js/web';
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 createComponent(ark.div, mergeProps(localProps, {
ref(r$) {
var _ref$ = composeRefs((el) => localNode = el, props.ref);
typeof _ref$ === "function" && _ref$(r$);
}
}));
};
export { FocusTrap };