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

85 строки
2.6 KiB

  1. import { unrefElement, tryOnScopeDispose } from '@vueuse/core';
  2. import { ref, watch } from 'vue-demi';
  3. import { createFocusTrap } from 'focus-trap';
  4. var __defProp = Object.defineProperty;
  5. var __defProps = Object.defineProperties;
  6. var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
  7. var __getOwnPropSymbols = Object.getOwnPropertySymbols;
  8. var __hasOwnProp = Object.prototype.hasOwnProperty;
  9. var __propIsEnum = Object.prototype.propertyIsEnumerable;
  10. var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  11. var __spreadValues = (a, b) => {
  12. for (var prop in b || (b = {}))
  13. if (__hasOwnProp.call(b, prop))
  14. __defNormalProp(a, prop, b[prop]);
  15. if (__getOwnPropSymbols)
  16. for (var prop of __getOwnPropSymbols(b)) {
  17. if (__propIsEnum.call(b, prop))
  18. __defNormalProp(a, prop, b[prop]);
  19. }
  20. return a;
  21. };
  22. var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
  23. var __objRest = (source, exclude) => {
  24. var target = {};
  25. for (var prop in source)
  26. if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
  27. target[prop] = source[prop];
  28. if (source != null && __getOwnPropSymbols)
  29. for (var prop of __getOwnPropSymbols(source)) {
  30. if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
  31. target[prop] = source[prop];
  32. }
  33. return target;
  34. };
  35. function useFocusTrap(target, options = {}) {
  36. let trap;
  37. const _a = options, { immediate } = _a, focusTrapOptions = __objRest(_a, ["immediate"]);
  38. const hasFocus = ref(false);
  39. const isPaused = ref(false);
  40. const activate = (opts) => trap && trap.activate(opts);
  41. const deactivate = (opts) => trap && trap.deactivate(opts);
  42. const pause = () => {
  43. if (trap) {
  44. trap.pause();
  45. isPaused.value = true;
  46. }
  47. };
  48. const unpause = () => {
  49. if (trap) {
  50. trap.unpause();
  51. isPaused.value = false;
  52. }
  53. };
  54. watch(() => unrefElement(target), (el) => {
  55. if (!el)
  56. return;
  57. trap = createFocusTrap(el, __spreadProps(__spreadValues({}, focusTrapOptions), {
  58. onActivate() {
  59. hasFocus.value = true;
  60. if (options.onActivate)
  61. options.onActivate();
  62. },
  63. onDeactivate() {
  64. hasFocus.value = false;
  65. if (options.onDeactivate)
  66. options.onDeactivate();
  67. }
  68. }));
  69. if (immediate)
  70. activate();
  71. }, { flush: "post" });
  72. tryOnScopeDispose(() => deactivate());
  73. return {
  74. hasFocus,
  75. isPaused,
  76. activate,
  77. deactivate,
  78. pause,
  79. unpause
  80. };
  81. }
  82. export { useFocusTrap };