hover.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.hover = hover;
  6. exports.unhover = unhover;
  7. var _dom = require("@testing-library/dom");
  8. var _utils = require("./utils");
  9. // includes `element`
  10. function getParentElements(element) {
  11. const parentElements = [element];
  12. let currentElement = element;
  13. while ((currentElement = currentElement.parentElement) != null) {
  14. parentElements.push(currentElement);
  15. }
  16. return parentElements;
  17. }
  18. function hover(element, init, {
  19. skipPointerEventsCheck = false
  20. } = {}) {
  21. if (!skipPointerEventsCheck && !(0, _utils.hasPointerEvents)(element)) {
  22. throw new Error('unable to hover element as it has or inherits pointer-events set to "none".');
  23. }
  24. if ((0, _utils.isLabelWithInternallyDisabledControl)(element)) return;
  25. const parentElements = getParentElements(element).reverse();
  26. _dom.fireEvent.pointerOver(element, init);
  27. for (const el of parentElements) {
  28. _dom.fireEvent.pointerEnter(el, init);
  29. }
  30. if (!(0, _utils.isDisabled)(element)) {
  31. _dom.fireEvent.mouseOver(element, (0, _utils.getMouseEventOptions)('mouseover', init));
  32. for (const el of parentElements) {
  33. _dom.fireEvent.mouseEnter(el, (0, _utils.getMouseEventOptions)('mouseenter', init));
  34. }
  35. }
  36. _dom.fireEvent.pointerMove(element, init);
  37. if (!(0, _utils.isDisabled)(element)) {
  38. _dom.fireEvent.mouseMove(element, (0, _utils.getMouseEventOptions)('mousemove', init));
  39. }
  40. }
  41. function unhover(element, init, {
  42. skipPointerEventsCheck = false
  43. } = {}) {
  44. if (!skipPointerEventsCheck && !(0, _utils.hasPointerEvents)(element)) {
  45. throw new Error('unable to unhover element as it has or inherits pointer-events set to "none".');
  46. }
  47. if ((0, _utils.isLabelWithInternallyDisabledControl)(element)) return;
  48. const parentElements = getParentElements(element);
  49. _dom.fireEvent.pointerMove(element, init);
  50. if (!(0, _utils.isDisabled)(element)) {
  51. _dom.fireEvent.mouseMove(element, (0, _utils.getMouseEventOptions)('mousemove', init));
  52. }
  53. _dom.fireEvent.pointerOut(element, init);
  54. for (const el of parentElements) {
  55. _dom.fireEvent.pointerLeave(el, init);
  56. }
  57. if (!(0, _utils.isDisabled)(element)) {
  58. _dom.fireEvent.mouseOut(element, (0, _utils.getMouseEventOptions)('mouseout', init));
  59. for (const el of parentElements) {
  60. _dom.fireEvent.mouseLeave(el, (0, _utils.getMouseEventOptions)('mouseleave', init));
  61. }
  62. }
  63. }