focus-visible.min.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. !(function (e, t) {
  2. 'object' == typeof exports && 'undefined' != typeof module
  3. ? t()
  4. : 'function' == typeof define && define.amd
  5. ? define(t)
  6. : t();
  7. })(0, function () {
  8. 'use strict';
  9. function e(e) {
  10. var t = !0,
  11. n = !1,
  12. o = null,
  13. d = {
  14. text: !0,
  15. search: !0,
  16. url: !0,
  17. tel: !0,
  18. email: !0,
  19. password: !0,
  20. number: !0,
  21. date: !0,
  22. month: !0,
  23. week: !0,
  24. time: !0,
  25. datetime: !0,
  26. 'datetime-local': !0,
  27. };
  28. function i(e) {
  29. return !!(
  30. e &&
  31. e !== document &&
  32. 'HTML' !== e.nodeName &&
  33. 'BODY' !== e.nodeName &&
  34. 'classList' in e &&
  35. 'contains' in e.classList
  36. );
  37. }
  38. function s(e) {
  39. e.classList.contains('focus-visible') ||
  40. (e.classList.add('focus-visible'),
  41. e.setAttribute('data-focus-visible-added', ''));
  42. }
  43. function u(e) {
  44. t = !1;
  45. }
  46. function a() {
  47. document.addEventListener('mousemove', c),
  48. document.addEventListener('mousedown', c),
  49. document.addEventListener('mouseup', c),
  50. document.addEventListener('pointermove', c),
  51. document.addEventListener('pointerdown', c),
  52. document.addEventListener('pointerup', c),
  53. document.addEventListener('touchmove', c),
  54. document.addEventListener('touchstart', c),
  55. document.addEventListener('touchend', c);
  56. }
  57. function c(e) {
  58. (e.target.nodeName && 'html' === e.target.nodeName.toLowerCase()) ||
  59. ((t = !1),
  60. document.removeEventListener('mousemove', c),
  61. document.removeEventListener('mousedown', c),
  62. document.removeEventListener('mouseup', c),
  63. document.removeEventListener('pointermove', c),
  64. document.removeEventListener('pointerdown', c),
  65. document.removeEventListener('pointerup', c),
  66. document.removeEventListener('touchmove', c),
  67. document.removeEventListener('touchstart', c),
  68. document.removeEventListener('touchend', c));
  69. }
  70. document.addEventListener(
  71. 'keydown',
  72. function (n) {
  73. n.metaKey ||
  74. n.altKey ||
  75. n.ctrlKey ||
  76. (i(e.activeElement) && s(e.activeElement), (t = !0));
  77. },
  78. !0,
  79. ),
  80. document.addEventListener('mousedown', u, !0),
  81. document.addEventListener('pointerdown', u, !0),
  82. document.addEventListener('touchstart', u, !0),
  83. document.addEventListener(
  84. 'visibilitychange',
  85. function (e) {
  86. 'hidden' === document.visibilityState &&
  87. (n && (t = !0), a());
  88. },
  89. !0,
  90. ),
  91. a(),
  92. e.addEventListener(
  93. 'focus',
  94. function (e) {
  95. var n, o, u;
  96. i(e.target) &&
  97. (t ||
  98. ((n = e.target),
  99. (o = n.type),
  100. ('INPUT' === (u = n.tagName) &&
  101. d[o] &&
  102. !n.readOnly) ||
  103. ('TEXTAREA' === u && !n.readOnly) ||
  104. n.isContentEditable)) &&
  105. s(e.target);
  106. },
  107. !0,
  108. ),
  109. e.addEventListener(
  110. 'blur',
  111. function (e) {
  112. var t;
  113. i(e.target) &&
  114. (e.target.classList.contains('focus-visible') ||
  115. e.target.hasAttribute(
  116. 'data-focus-visible-added',
  117. )) &&
  118. ((n = !0),
  119. window.clearTimeout(o),
  120. (o = window.setTimeout(function () {
  121. n = !1;
  122. }, 100)),
  123. (t = e.target).hasAttribute(
  124. 'data-focus-visible-added',
  125. ) &&
  126. (t.classList.remove('focus-visible'),
  127. t.removeAttribute('data-focus-visible-added')));
  128. },
  129. !0,
  130. ),
  131. e.nodeType === Node.DOCUMENT_FRAGMENT_NODE && e.host
  132. ? e.host.setAttribute('data-js-focus-visible', '')
  133. : e.nodeType === Node.DOCUMENT_NODE &&
  134. (document.documentElement.classList.add('js-focus-visible'),
  135. document.documentElement.setAttribute(
  136. 'data-js-focus-visible',
  137. '',
  138. ));
  139. }
  140. if ('undefined' != typeof window && 'undefined' != typeof document) {
  141. var t;
  142. window.applyFocusVisiblePolyfill = e;
  143. try {
  144. t = new CustomEvent('focus-visible-polyfill-ready');
  145. } catch (e) {
  146. (t = document.createEvent('CustomEvent')).initCustomEvent(
  147. 'focus-visible-polyfill-ready',
  148. !1,
  149. !1,
  150. {},
  151. );
  152. }
  153. window.dispatchEvent(t);
  154. }
  155. 'undefined' != typeof document && e(document);
  156. });
  157. //# sourceMappingURL=focus-visible.min.js.map