|
- import { unrefElement, tryOnScopeDispose } from '@vueuse/core';
- import { ref, watch } from 'vue-demi';
- import { createFocusTrap } from 'focus-trap';
-
- var __defProp = Object.defineProperty;
- var __defProps = Object.defineProperties;
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
- var __hasOwnProp = Object.prototype.hasOwnProperty;
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
- var __spreadValues = (a, b) => {
- for (var prop in b || (b = {}))
- if (__hasOwnProp.call(b, prop))
- __defNormalProp(a, prop, b[prop]);
- if (__getOwnPropSymbols)
- for (var prop of __getOwnPropSymbols(b)) {
- if (__propIsEnum.call(b, prop))
- __defNormalProp(a, prop, b[prop]);
- }
- return a;
- };
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
- var __objRest = (source, exclude) => {
- var target = {};
- for (var prop in source)
- if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
- target[prop] = source[prop];
- if (source != null && __getOwnPropSymbols)
- for (var prop of __getOwnPropSymbols(source)) {
- if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
- target[prop] = source[prop];
- }
- return target;
- };
- function useFocusTrap(target, options = {}) {
- let trap;
- const _a = options, { immediate } = _a, focusTrapOptions = __objRest(_a, ["immediate"]);
- const hasFocus = ref(false);
- const isPaused = ref(false);
- const activate = (opts) => trap && trap.activate(opts);
- const deactivate = (opts) => trap && trap.deactivate(opts);
- const pause = () => {
- if (trap) {
- trap.pause();
- isPaused.value = true;
- }
- };
- const unpause = () => {
- if (trap) {
- trap.unpause();
- isPaused.value = false;
- }
- };
- watch(() => unrefElement(target), (el) => {
- if (!el)
- return;
- trap = createFocusTrap(el, __spreadProps(__spreadValues({}, focusTrapOptions), {
- onActivate() {
- hasFocus.value = true;
- if (options.onActivate)
- options.onActivate();
- },
- onDeactivate() {
- hasFocus.value = false;
- if (options.onDeactivate)
- options.onDeactivate();
- }
- }));
- if (immediate)
- activate();
- }, { flush: "post" });
- tryOnScopeDispose(() => deactivate());
- return {
- hasFocus,
- isPaused,
- activate,
- deactivate,
- pause,
- unpause
- };
- }
-
- export { useFocusTrap };
|