@lui-ui/lui-vue
Version:
This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
35 lines (34 loc) • 747 B
JavaScript
import { customRef } from "vue";
import { createFocusTrap } from "focus-trap";
export function useFocusTrap(focusTrapArgs) {
let trap = null;
function initFocusTrap(el, focusTrapArgs2 = {}) {
if (!el)
return;
trap = createFocusTrap(el, focusTrapArgs2);
trap.activate();
}
function clearFocusTrap() {
trap?.deactivate();
trap = null;
}
const trapRef = customRef((track, trigger) => {
let $trapEl = null;
return {
get() {
track();
return $trapEl;
},
set(value) {
$trapEl = value;
value ? initFocusTrap(value, focusTrapArgs) : clearFocusTrap();
trigger();
}
};
});
return {
trapRef,
initFocusTrap,
clearFocusTrap
};
}