Warp/node_modules/@vueuse/integrations/useFocusTrap/component.cjs

34 lines
870 B
JavaScript
Raw Normal View History

2024-01-05 12:14:38 +00:00
'use strict';
var core = require('@vueuse/core');
var focusTrap = require('focus-trap');
var vue = require('vue');
2024-01-05 12:14:38 +00:00
const UseFocusTrap = /* @__PURE__ */ /*@__PURE__*/ vue.defineComponent({
2024-01-05 12:14:38 +00:00
name: "UseFocusTrap",
props: ["as", "options"],
setup(props, { slots }) {
let trap;
const target = vue.ref();
2024-01-05 12:14:38 +00:00
const activate = () => trap && trap.activate();
const deactivate = () => trap && trap.deactivate();
vue.watch(
2024-01-05 12:14:38 +00:00
() => core.unrefElement(target),
(el) => {
if (!el)
return;
trap = focusTrap.createFocusTrap(el, props.options || {});
activate();
},
{ flush: "post" }
);
vue.onScopeDispose(() => deactivate());
2024-01-05 12:14:38 +00:00
return () => {
if (slots.default)
return vue.h(props.as || "div", { ref: target }, slots.default());
2024-01-05 12:14:38 +00:00
};
}
});
exports.UseFocusTrap = UseFocusTrap;