版博士V2.0程序
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

28 строки
841 B

  1. import { defineComponent, ref, watch, onScopeDispose, h } from 'vue-demi';
  2. import { createFocusTrap } from 'focus-trap';
  3. import { unrefElement } from '@vueuse/core';
  4. const UseFocusTrap = /* @__PURE__ */ /* #__PURE__ */ defineComponent({
  5. name: "UseFocusTrap",
  6. props: ["as", "options"],
  7. setup(props, { slots }) {
  8. let trap;
  9. const target = ref();
  10. const activate = () => trap && trap.activate();
  11. const deactivate = () => trap && trap.deactivate();
  12. watch(() => unrefElement(target), (el) => {
  13. if (!el)
  14. return;
  15. trap = createFocusTrap(el, props.options || {});
  16. activate();
  17. }, { flush: "post" });
  18. onScopeDispose(() => deactivate());
  19. return () => {
  20. if (slots.default)
  21. return h(props.as || "div", { ref: target }, slots.default());
  22. };
  23. }
  24. });
  25. export { UseFocusTrap };