mirror of
https://github.com/imezx/Warp.git
synced 2025-04-24 15:10:03 +00:00
33 lines
901 B
JavaScript
33 lines
901 B
JavaScript
'use strict';
|
|
|
|
var vueDemi = require('vue-demi');
|
|
var focusTrap = require('focus-trap');
|
|
var core = require('@vueuse/core');
|
|
|
|
const UseFocusTrap = /* @__PURE__ */ /* #__PURE__ */ vueDemi.defineComponent({
|
|
name: "UseFocusTrap",
|
|
props: ["as", "options"],
|
|
setup(props, { slots }) {
|
|
let trap;
|
|
const target = vueDemi.ref();
|
|
const activate = () => trap && trap.activate();
|
|
const deactivate = () => trap && trap.deactivate();
|
|
vueDemi.watch(
|
|
() => core.unrefElement(target),
|
|
(el) => {
|
|
if (!el)
|
|
return;
|
|
trap = focusTrap.createFocusTrap(el, props.options || {});
|
|
activate();
|
|
},
|
|
{ flush: "post" }
|
|
);
|
|
vueDemi.onScopeDispose(() => deactivate());
|
|
return () => {
|
|
if (slots.default)
|
|
return vueDemi.h(props.as || "div", { ref: target }, slots.default());
|
|
};
|
|
}
|
|
});
|
|
|
|
exports.UseFocusTrap = UseFocusTrap;
|