@swisspost/design-system-components 9.0.0-next.9 → 9.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (466) hide show
  1. package/dist/cjs/{index-5d4e0aed.js → index-824d2b71.js} +12 -2
  2. package/dist/cjs/{index-010dc207.js → index-e1f32cce.js} +17 -30
  3. package/dist/cjs/index.cjs.js +26 -50
  4. package/dist/cjs/loader.cjs.js +2 -2
  5. package/dist/cjs/{package-8e810a59.js → package-93f142ae.js} +1 -1
  6. package/dist/cjs/{post-accordion-b9df8522.js → post-accordion-60af96cf.js} +3 -3
  7. package/dist/cjs/post-accordion-item-744c881d.js +52 -0
  8. package/dist/cjs/post-accordion-item.cjs.entry.js +4 -5
  9. package/dist/cjs/post-accordion.cjs.entry.js +3 -3
  10. package/dist/cjs/post-alert-2a768f58.js +99 -0
  11. package/dist/cjs/{post-banner.cjs.entry.js → post-alert.cjs.entry.js} +5 -6
  12. package/dist/cjs/post-card-control-197c8e44.js +272 -0
  13. package/dist/cjs/post-card-control.cjs.entry.js +3 -3
  14. package/dist/cjs/{post-collapsible-trigger-143cf84a.js → post-collapsible-trigger-3de8fe4e.js} +24 -11
  15. package/dist/cjs/post-collapsible_2.cjs.entry.js +4 -7
  16. package/dist/cjs/post-components.cjs.js +2 -2
  17. package/dist/cjs/post-icon-df629079.js +139 -0
  18. package/dist/cjs/post-icon.cjs.entry.js +16 -0
  19. package/dist/cjs/post-logo-7caeb918.js +39 -0
  20. package/dist/cjs/post-logo.cjs.entry.js +15 -0
  21. package/dist/cjs/post-popover-090c3d01.js +131 -0
  22. package/dist/cjs/post-popover.cjs.entry.js +3 -4
  23. package/dist/cjs/{post-togglebutton-0984a694.js → post-popovercontainer-872681bf.js} +148 -1106
  24. package/dist/cjs/post-popovercontainer.cjs.entry.js +11 -0
  25. package/dist/cjs/post-rating-21f9c46d.js +88 -0
  26. package/dist/cjs/post-rating.cjs.entry.js +3 -3
  27. package/dist/cjs/post-tab-header-422d0f03.js +32 -0
  28. package/dist/cjs/post-tab-header.cjs.entry.js +3 -3
  29. package/dist/cjs/{post-tab-panel-60f211a5.js → post-tab-panel-dd58f425.js} +3 -3
  30. package/dist/cjs/post-tab-panel.cjs.entry.js +3 -3
  31. package/dist/cjs/{post-tabs-1f797ce4.js → post-tabs-83191b9a.js} +5 -5
  32. package/dist/cjs/post-tabs.cjs.entry.js +3 -3
  33. package/dist/cjs/post-tag-c72183f2.js +47 -0
  34. package/dist/cjs/post-tag.cjs.entry.js +3 -3
  35. package/dist/cjs/post-tooltip-782f020b.js +69 -0
  36. package/dist/cjs/{post-tooltip-38c839a4.js → post-tooltip-trigger-b2aeb636.js} +507 -557
  37. package/dist/cjs/post-tooltip-trigger.cjs.entry.js +12 -0
  38. package/dist/cjs/post-tooltip.cjs.entry.js +3 -8
  39. package/dist/collection/collection-manifest.json +4 -21
  40. package/dist/collection/components/post-accordion/post-accordion.css +1 -1
  41. package/dist/collection/components/post-accordion/post-accordion.js +2 -2
  42. package/dist/collection/components/post-accordion-item/post-accordion-item.css +1 -1
  43. package/dist/collection/components/post-accordion-item/post-accordion-item.js +10 -24
  44. package/dist/collection/components/post-alert/alert-types.js +1 -0
  45. package/dist/collection/components/post-alert/post-alert.css +35 -0
  46. package/dist/collection/components/{post-banner/post-banner.js → post-alert/post-alert.js} +68 -39
  47. package/dist/collection/components/post-card-control/post-card-control.css +30 -2
  48. package/dist/collection/components/post-card-control/post-card-control.js +8 -8
  49. package/dist/collection/components/post-collapsible/post-collapsible.js +2 -4
  50. package/dist/collection/components/post-icon/post-icon.css +1 -1
  51. package/dist/collection/components/post-icon/post-icon.js +52 -13
  52. package/dist/collection/components/post-logo/post-logo.js +1 -1
  53. package/dist/collection/components/post-popover/post-popover.css +30 -2
  54. package/dist/collection/components/post-popover/post-popover.js +10 -6
  55. package/dist/collection/components/post-popovercontainer/post-popovercontainer.css +31 -1
  56. package/dist/collection/components/post-popovercontainer/post-popovercontainer.js +180 -52
  57. package/dist/collection/components/post-rating/post-rating.css +29 -1
  58. package/dist/collection/components/post-rating/post-rating.js +1 -1
  59. package/dist/collection/components/post-tab-header/post-tab-header.css +29 -1
  60. package/dist/collection/components/post-tab-header/post-tab-header.js +1 -1
  61. package/dist/collection/components/post-tab-panel/post-tab-panel.js +1 -1
  62. package/dist/collection/components/post-tabs/post-tabs.css +1 -1
  63. package/dist/collection/components/post-tabs/post-tabs.js +2 -2
  64. package/dist/collection/components/post-tag/post-tag.css +29 -1
  65. package/dist/collection/components/post-tag/post-tag.js +2 -2
  66. package/dist/collection/components/post-tooltip/post-tooltip.css +1 -1
  67. package/dist/collection/components/post-tooltip/post-tooltip.js +60 -213
  68. package/dist/collection/components/post-tooltip-trigger/post-tooltip-trigger.css +1 -0
  69. package/dist/collection/components/post-tooltip-trigger/post-tooltip-trigger.js +230 -0
  70. package/dist/collection/index.js +3 -20
  71. package/dist/components/index.js +3 -20
  72. package/dist/components/index2.js +1 -1
  73. package/dist/components/package.js +1 -1
  74. package/dist/components/post-accordion-item2.js +12 -30
  75. package/dist/components/post-accordion2.js +1 -1
  76. package/dist/components/{post-list.d.ts → post-alert.d.ts} +4 -4
  77. package/dist/components/post-alert.js +6 -0
  78. package/dist/components/post-alert2.js +136 -0
  79. package/dist/components/post-card-control2.js +3 -3
  80. package/dist/components/post-collapsible-trigger2.js +17 -2
  81. package/dist/components/post-collapsible2.js +3 -5
  82. package/dist/components/post-icon2.js +54 -15
  83. package/dist/components/post-logo2.js +1 -1
  84. package/dist/components/post-popover2.js +35 -8
  85. package/dist/components/post-popovercontainer2.js +136 -41
  86. package/dist/components/post-rating2.js +2 -2
  87. package/dist/components/post-tab-header2.js +2 -2
  88. package/dist/components/post-tab-panel2.js +1 -1
  89. package/dist/components/post-tabs2.js +3 -3
  90. package/dist/components/post-tag2.js +2 -2
  91. package/dist/components/{post-breadcrumb-item.d.ts → post-tooltip-trigger.d.ts} +4 -4
  92. package/dist/components/post-tooltip-trigger.js +6 -0
  93. package/dist/components/post-tooltip-trigger2.js +4968 -0
  94. package/dist/components/post-tooltip2.js +32 -4962
  95. package/dist/docs.json +401 -1776
  96. package/dist/esm/{index-b49c9904.js → index-69587a51.js} +12 -2
  97. package/dist/esm/{index-fb8d6be7.js → index-e1b64755.js} +17 -30
  98. package/dist/esm/index.js +20 -27
  99. package/dist/esm/loader.js +3 -3
  100. package/dist/esm/package-45827c3b.js +3 -0
  101. package/dist/esm/{post-accordion-ee54a3ef.js → post-accordion-bcfe7e61.js} +3 -3
  102. package/dist/esm/post-accordion-item-8869c90b.js +50 -0
  103. package/dist/esm/post-accordion-item.entry.js +4 -5
  104. package/dist/esm/post-accordion.entry.js +3 -3
  105. package/dist/esm/post-alert-21fd0068.js +97 -0
  106. package/dist/esm/post-alert.entry.js +9 -0
  107. package/dist/esm/post-card-control-60c132dc.js +270 -0
  108. package/dist/esm/post-card-control.entry.js +3 -3
  109. package/dist/esm/{post-collapsible-trigger-1c7833f8.js → post-collapsible-trigger-3168178e.js} +22 -9
  110. package/dist/esm/post-collapsible_2.entry.js +4 -7
  111. package/dist/esm/post-components.js +3 -3
  112. package/dist/esm/post-icon-2e2e18ad.js +137 -0
  113. package/dist/esm/post-icon.entry.js +8 -0
  114. package/dist/esm/post-logo-f364eb72.js +37 -0
  115. package/dist/esm/post-logo.entry.js +7 -0
  116. package/dist/esm/post-popover-697201cd.js +129 -0
  117. package/dist/esm/post-popover.entry.js +3 -4
  118. package/dist/esm/{post-togglebutton-395bf3f0.js → post-popovercontainer-2b5f37fb.js} +149 -1093
  119. package/dist/esm/post-popovercontainer.entry.js +3 -0
  120. package/dist/esm/post-rating-0fd5de37.js +86 -0
  121. package/dist/esm/post-rating.entry.js +3 -3
  122. package/dist/esm/post-tab-header-c8898fa2.js +30 -0
  123. package/dist/esm/post-tab-header.entry.js +3 -3
  124. package/dist/esm/{post-tab-panel-cafd9e04.js → post-tab-panel-6b1219e0.js} +3 -3
  125. package/dist/esm/post-tab-panel.entry.js +3 -3
  126. package/dist/esm/{post-tabs-beef8eae.js → post-tabs-b8ff3c5d.js} +5 -5
  127. package/dist/esm/post-tabs.entry.js +3 -3
  128. package/dist/esm/post-tag-83470f28.js +45 -0
  129. package/dist/esm/post-tag.entry.js +3 -3
  130. package/dist/esm/post-tooltip-aa745743.js +67 -0
  131. package/dist/esm/{post-tooltip-b298039a.js → post-tooltip-trigger-ce0b4106.js} +507 -557
  132. package/dist/esm/post-tooltip-trigger.entry.js +4 -0
  133. package/dist/esm/post-tooltip.entry.js +3 -8
  134. package/dist/post-components/index.esm.js +1 -1
  135. package/dist/post-components/p-08dc45bb.entry.js +1 -0
  136. package/dist/post-components/p-1a48d1b0.js +1 -0
  137. package/dist/post-components/p-2b61a526.entry.js +1 -0
  138. package/dist/post-components/{p-c0ae9886.js → p-3eab790d.js} +1 -1
  139. package/dist/post-components/p-3f5bf5d9.entry.js +1 -0
  140. package/dist/post-components/p-40e5bb56.entry.js +1 -0
  141. package/dist/post-components/p-56ca6bb5.js +1 -0
  142. package/dist/post-components/p-58cbb854.entry.js +1 -0
  143. package/dist/post-components/p-5c557e64.js +1 -0
  144. package/dist/post-components/p-5ce2abc9.entry.js +1 -0
  145. package/dist/post-components/p-5f08d625.js +15 -0
  146. package/dist/post-components/p-7069ac74.entry.js +1 -0
  147. package/dist/post-components/p-755b2746.js +1 -0
  148. package/dist/post-components/p-788e64fb.js +1 -0
  149. package/dist/post-components/p-799cf60e.js +1 -0
  150. package/dist/post-components/p-7bbcc8ee.js +1 -0
  151. package/dist/post-components/p-7cdf9571.entry.js +1 -0
  152. package/dist/post-components/p-7e4181ce.entry.js +1 -0
  153. package/dist/post-components/p-9409f729.js +1 -0
  154. package/dist/post-components/p-a07846ea.js +1 -0
  155. package/dist/post-components/p-a4560368.js +1 -0
  156. package/dist/post-components/p-a503cb2c.entry.js +1 -0
  157. package/dist/post-components/p-b46e2451.js +1 -0
  158. package/dist/post-components/p-b7207224.js +1 -0
  159. package/dist/post-components/p-bafc0491.js +1 -0
  160. package/dist/post-components/p-c078fd94.entry.js +1 -0
  161. package/dist/post-components/p-c0aebe5e.entry.js +1 -0
  162. package/dist/post-components/p-c7e4acde.js +1 -0
  163. package/dist/post-components/p-ca71a3ff.entry.js +1 -0
  164. package/dist/post-components/p-d582cc10.js +1 -0
  165. package/dist/post-components/p-e49f57c0.entry.js +1 -0
  166. package/dist/post-components/p-eb712f9b.entry.js +1 -0
  167. package/dist/post-components/p-eebd060d.js +1 -0
  168. package/dist/post-components/p-f7cead60.entry.js +1 -0
  169. package/dist/post-components/p-ffd75503.js +1 -0
  170. package/dist/post-components/post-components.esm.js +1 -1
  171. package/dist/types/components/post-accordion/post-accordion.d.ts +1 -1
  172. package/dist/types/components/post-accordion-item/post-accordion-item.d.ts +1 -7
  173. package/dist/types/components/post-alert/alert-types.d.ts +2 -0
  174. package/dist/types/components/post-alert/post-alert.d.ts +54 -0
  175. package/dist/types/components/post-card-control/post-card-control.d.ts +7 -7
  176. package/dist/types/components/post-icon/post-icon.d.ts +1 -1
  177. package/dist/types/components/post-popovercontainer/post-popovercontainer.d.ts +31 -13
  178. package/dist/types/components/post-tag/post-tag.d.ts +1 -1
  179. package/dist/types/components/post-tooltip/post-tooltip.d.ts +20 -34
  180. package/dist/types/components/post-tooltip-trigger/post-tooltip-trigger.d.ts +47 -0
  181. package/dist/types/components.d.ts +124 -590
  182. package/dist/types/index.d.ts +3 -20
  183. package/loaders/index.d.ts +4 -38
  184. package/loaders/index.js +4 -21
  185. package/loaders/index2.js +1 -1
  186. package/loaders/package.js +1 -1
  187. package/loaders/post-accordion-item.js +82 -1
  188. package/loaders/post-accordion.js +1 -1
  189. package/loaders/{post-list.d.ts → post-alert.d.ts} +4 -4
  190. package/loaders/post-alert.js +139 -0
  191. package/loaders/post-card-control.js +3 -3
  192. package/loaders/post-collapsible-trigger2.js +17 -2
  193. package/loaders/post-collapsible2.js +3 -5
  194. package/loaders/post-icon2.js +54 -15
  195. package/loaders/post-logo.js +2 -2
  196. package/loaders/post-popover.js +35 -8
  197. package/loaders/post-popovercontainer2.js +136 -41
  198. package/loaders/post-rating.js +2 -2
  199. package/loaders/post-tab-header.js +2 -2
  200. package/loaders/post-tab-panel.js +1 -1
  201. package/loaders/post-tabs.js +3 -3
  202. package/loaders/post-tag.js +2 -2
  203. package/loaders/{post-avatar.d.ts → post-tooltip-trigger.d.ts} +4 -4
  204. package/loaders/post-tooltip-trigger.js +4971 -0
  205. package/loaders/post-tooltip.js +32 -4962
  206. package/package.json +6 -9
  207. package/dist/cjs/attribute-observer-10f08c04.js +0 -27
  208. package/dist/cjs/check-url-3ffdd2fb.js +0 -14
  209. package/dist/cjs/debounce-1151afe3.js +0 -12
  210. package/dist/cjs/get-root-7a3498ef.js +0 -11
  211. package/dist/cjs/post-accordion-item-ecc6749f.js +0 -63
  212. package/dist/cjs/post-avatar-f7236084.js +0 -148
  213. package/dist/cjs/post-avatar.cjs.entry.js +0 -13
  214. package/dist/cjs/post-back-to-top-60762f8e.js +0 -75
  215. package/dist/cjs/post-back-to-top.cjs.entry.js +0 -15
  216. package/dist/cjs/post-banner-9662f22c.js +0 -90
  217. package/dist/cjs/post-breadcrumb-b40732fc.js +0 -111
  218. package/dist/cjs/post-breadcrumb-item_2.cjs.entry.js +0 -17
  219. package/dist/cjs/post-breadcrumb.cjs.entry.js +0 -13
  220. package/dist/cjs/post-card-control-039c9a4b.js +0 -272
  221. package/dist/cjs/post-closebutton_15.cjs.entry.js +0 -33
  222. package/dist/cjs/post-footer-5f7fdf96.js +0 -84
  223. package/dist/cjs/post-footer.cjs.entry.js +0 -11
  224. package/dist/cjs/post-menu-item-bb0b0b9e.js +0 -74
  225. package/dist/cjs/post-popover-d0ce9dc6.js +0 -104
  226. package/dist/cjs/post-rating-1082197c.js +0 -88
  227. package/dist/cjs/post-tab-header-4b6d8d54.js +0 -32
  228. package/dist/cjs/post-tag-ddaaaedc.js +0 -47
  229. package/dist/cjs/slide-5d51abe8.js +0 -28
  230. package/dist/collection/animations/slide.js +0 -23
  231. package/dist/collection/components/post-avatar/post-avatar.css +0 -3
  232. package/dist/collection/components/post-avatar/post-avatar.js +0 -237
  233. package/dist/collection/components/post-back-to-top/post-back-to-top.css +0 -1
  234. package/dist/collection/components/post-back-to-top/post-back-to-top.js +0 -107
  235. package/dist/collection/components/post-banner/banner-types.js +0 -1
  236. package/dist/collection/components/post-banner/post-banner.css +0 -3
  237. package/dist/collection/components/post-breadcrumb/post-breadcrumb.css +0 -3
  238. package/dist/collection/components/post-breadcrumb/post-breadcrumb.js +0 -161
  239. package/dist/collection/components/post-breadcrumb-item/post-breadcrumb-item.css +0 -1
  240. package/dist/collection/components/post-breadcrumb-item/post-breadcrumb-item.js +0 -93
  241. package/dist/collection/components/post-closebutton/post-closebutton.js +0 -12
  242. package/dist/collection/components/post-footer/post-footer.css +0 -1
  243. package/dist/collection/components/post-footer/post-footer.js +0 -75
  244. package/dist/collection/components/post-header/post-header.css +0 -1
  245. package/dist/collection/components/post-header/post-header.js +0 -160
  246. package/dist/collection/components/post-language-option/post-language-option.css +0 -3
  247. package/dist/collection/components/post-language-option/post-language-option.js +0 -215
  248. package/dist/collection/components/post-language-switch/post-language-switch.css +0 -1
  249. package/dist/collection/components/post-language-switch/post-language-switch.js +0 -163
  250. package/dist/collection/components/post-language-switch/switch-variants.js +0 -1
  251. package/dist/collection/components/post-list/post-list.css +0 -3
  252. package/dist/collection/components/post-list/post-list.js +0 -87
  253. package/dist/collection/components/post-list-item/post-list-item.css +0 -1
  254. package/dist/collection/components/post-list-item/post-list-item.js +0 -25
  255. package/dist/collection/components/post-mainnavigation/post-mainnavigation.css +0 -1
  256. package/dist/collection/components/post-mainnavigation/post-mainnavigation.js +0 -52
  257. package/dist/collection/components/post-megadropdown/post-megadropdown.css +0 -1
  258. package/dist/collection/components/post-megadropdown/post-megadropdown.js +0 -151
  259. package/dist/collection/components/post-megadropdown-trigger/post-megadropdown-trigger.css +0 -1
  260. package/dist/collection/components/post-megadropdown-trigger/post-megadropdown-trigger.js +0 -104
  261. package/dist/collection/components/post-menu/post-menu.css +0 -3
  262. package/dist/collection/components/post-menu/post-menu.js +0 -280
  263. package/dist/collection/components/post-menu-item/post-menu-item.css +0 -1
  264. package/dist/collection/components/post-menu-item/post-menu-item.js +0 -20
  265. package/dist/collection/components/post-menu-trigger/post-menu-trigger.css +0 -1
  266. package/dist/collection/components/post-menu-trigger/post-menu-trigger.js +0 -114
  267. package/dist/collection/components/post-togglebutton/post-togglebutton.css +0 -1
  268. package/dist/collection/components/post-togglebutton/post-togglebutton.js +0 -74
  269. package/dist/collection/utils/breakpoints.js +0 -46
  270. package/dist/collection/utils/is-focusable.js +0 -26
  271. package/dist/components/attribute-observer.js +0 -25
  272. package/dist/components/debounce.js +0 -10
  273. package/dist/components/get-root.js +0 -9
  274. package/dist/components/post-avatar.d.ts +0 -11
  275. package/dist/components/post-avatar.js +0 -6
  276. package/dist/components/post-avatar2.js +0 -173
  277. package/dist/components/post-back-to-top.d.ts +0 -11
  278. package/dist/components/post-back-to-top.js +0 -6
  279. package/dist/components/post-back-to-top2.js +0 -100
  280. package/dist/components/post-banner.d.ts +0 -11
  281. package/dist/components/post-banner.js +0 -6
  282. package/dist/components/post-banner2.js +0 -125
  283. package/dist/components/post-breadcrumb-item.js +0 -6
  284. package/dist/components/post-breadcrumb-item2.js +0 -82
  285. package/dist/components/post-breadcrumb.d.ts +0 -11
  286. package/dist/components/post-breadcrumb.js +0 -6
  287. package/dist/components/post-breadcrumb2.js +0 -168
  288. package/dist/components/post-closebutton.d.ts +0 -11
  289. package/dist/components/post-closebutton.js +0 -6
  290. package/dist/components/post-closebutton2.js +0 -34
  291. package/dist/components/post-footer.d.ts +0 -11
  292. package/dist/components/post-footer.js +0 -6
  293. package/dist/components/post-footer2.js +0 -124
  294. package/dist/components/post-header.d.ts +0 -11
  295. package/dist/components/post-header.js +0 -6
  296. package/dist/components/post-header2.js +0 -276
  297. package/dist/components/post-language-option.d.ts +0 -11
  298. package/dist/components/post-language-option.js +0 -6
  299. package/dist/components/post-language-option2.js +0 -94
  300. package/dist/components/post-language-switch.d.ts +0 -11
  301. package/dist/components/post-language-switch.js +0 -6
  302. package/dist/components/post-language-switch2.js +0 -146
  303. package/dist/components/post-list-item.d.ts +0 -11
  304. package/dist/components/post-list-item.js +0 -6
  305. package/dist/components/post-list-item2.js +0 -35
  306. package/dist/components/post-list.js +0 -6
  307. package/dist/components/post-list2.js +0 -53
  308. package/dist/components/post-mainnavigation.d.ts +0 -11
  309. package/dist/components/post-mainnavigation.js +0 -6
  310. package/dist/components/post-mainnavigation2.js +0 -48
  311. package/dist/components/post-megadropdown-trigger.d.ts +0 -11
  312. package/dist/components/post-megadropdown-trigger.js +0 -6
  313. package/dist/components/post-megadropdown-trigger2.js +0 -91
  314. package/dist/components/post-megadropdown.d.ts +0 -11
  315. package/dist/components/post-megadropdown.js +0 -6
  316. package/dist/components/post-megadropdown2.js +0 -93
  317. package/dist/components/post-menu-item.d.ts +0 -11
  318. package/dist/components/post-menu-item.js +0 -6
  319. package/dist/components/post-menu-item2.js +0 -33
  320. package/dist/components/post-menu-trigger.d.ts +0 -11
  321. package/dist/components/post-menu-trigger.js +0 -6
  322. package/dist/components/post-menu-trigger2.js +0 -102
  323. package/dist/components/post-menu.d.ts +0 -11
  324. package/dist/components/post-menu.js +0 -6
  325. package/dist/components/post-menu2.js +0 -203
  326. package/dist/components/post-togglebutton.d.ts +0 -11
  327. package/dist/components/post-togglebutton.js +0 -6
  328. package/dist/components/post-togglebutton2.js +0 -61
  329. package/dist/components/slide.js +0 -25
  330. package/dist/esm/attribute-observer-37fa950a.js +0 -25
  331. package/dist/esm/check-url-a974431e.js +0 -12
  332. package/dist/esm/debounce-abe98cc2.js +0 -10
  333. package/dist/esm/get-root-7af2e0d1.js +0 -9
  334. package/dist/esm/package-4d81f3c2.js +0 -3
  335. package/dist/esm/post-accordion-item-e10452dc.js +0 -61
  336. package/dist/esm/post-avatar-5572fa73.js +0 -146
  337. package/dist/esm/post-avatar.entry.js +0 -5
  338. package/dist/esm/post-back-to-top-1d823c43.js +0 -73
  339. package/dist/esm/post-back-to-top.entry.js +0 -7
  340. package/dist/esm/post-banner-78480475.js +0 -88
  341. package/dist/esm/post-banner.entry.js +0 -10
  342. package/dist/esm/post-breadcrumb-aaa77f74.js +0 -109
  343. package/dist/esm/post-breadcrumb-item_2.entry.js +0 -8
  344. package/dist/esm/post-breadcrumb.entry.js +0 -5
  345. package/dist/esm/post-card-control-862aa961.js +0 -270
  346. package/dist/esm/post-closebutton_15.entry.js +0 -11
  347. package/dist/esm/post-footer-b18875e7.js +0 -82
  348. package/dist/esm/post-footer.entry.js +0 -3
  349. package/dist/esm/post-menu-item-2906384b.js +0 -71
  350. package/dist/esm/post-popover-2432bb3f.js +0 -102
  351. package/dist/esm/post-rating-95cbdbb8.js +0 -86
  352. package/dist/esm/post-tab-header-dfea00ea.js +0 -30
  353. package/dist/esm/post-tag-a77e7af6.js +0 -45
  354. package/dist/esm/slide-3422b8a3.js +0 -25
  355. package/dist/post-components/p-0711f76d.entry.js +0 -1
  356. package/dist/post-components/p-095a06f6.entry.js +0 -1
  357. package/dist/post-components/p-0b5a5f32.js +0 -1
  358. package/dist/post-components/p-135fa60f.js +0 -1
  359. package/dist/post-components/p-18e38d8a.js +0 -1
  360. package/dist/post-components/p-2e1ec074.entry.js +0 -1
  361. package/dist/post-components/p-4202b433.entry.js +0 -1
  362. package/dist/post-components/p-45773f59.js +0 -1
  363. package/dist/post-components/p-4953de7e.js +0 -1
  364. package/dist/post-components/p-4f67c5f5.entry.js +0 -1
  365. package/dist/post-components/p-4f9746f6.js +0 -15
  366. package/dist/post-components/p-5075c672.entry.js +0 -1
  367. package/dist/post-components/p-515e0f96.js +0 -1
  368. package/dist/post-components/p-5467b223.js +0 -1
  369. package/dist/post-components/p-67036798.entry.js +0 -1
  370. package/dist/post-components/p-6adeaa6c.js +0 -1
  371. package/dist/post-components/p-6d953fb2.js +0 -1
  372. package/dist/post-components/p-6edb0ac5.js +0 -1
  373. package/dist/post-components/p-6f8f39ca.js +0 -1
  374. package/dist/post-components/p-7503a623.js +0 -1
  375. package/dist/post-components/p-761b24c7.entry.js +0 -1
  376. package/dist/post-components/p-77c4c1d2.js +0 -1
  377. package/dist/post-components/p-7cf0c2ad.js +0 -1
  378. package/dist/post-components/p-856c14d6.entry.js +0 -1
  379. package/dist/post-components/p-866bf50a.entry.js +0 -1
  380. package/dist/post-components/p-8d621781.js +0 -1
  381. package/dist/post-components/p-8fe2d72c.entry.js +0 -1
  382. package/dist/post-components/p-9ad5088f.entry.js +0 -1
  383. package/dist/post-components/p-a1d2b90e.js +0 -1
  384. package/dist/post-components/p-a521419d.entry.js +0 -1
  385. package/dist/post-components/p-aa538648.js +0 -1
  386. package/dist/post-components/p-afdbee2f.js +0 -1
  387. package/dist/post-components/p-b02817f2.entry.js +0 -1
  388. package/dist/post-components/p-b157dcba.entry.js +0 -1
  389. package/dist/post-components/p-b22656b1.js +0 -1
  390. package/dist/post-components/p-bdbd11cb.js +0 -1
  391. package/dist/post-components/p-c537e196.entry.js +0 -1
  392. package/dist/post-components/p-d4f93f2b.js +0 -1
  393. package/dist/post-components/p-dca4246a.entry.js +0 -1
  394. package/dist/post-components/p-f319b026.js +0 -1
  395. package/dist/post-components/p-f4b7b379.js +0 -1
  396. package/dist/post-components/p-fac66087.entry.js +0 -1
  397. package/dist/post-components/p-fc91cbc2.js +0 -1
  398. package/dist/types/animations/slide.d.ts +0 -2
  399. package/dist/types/components/post-avatar/post-avatar.d.ts +0 -51
  400. package/dist/types/components/post-back-to-top/post-back-to-top.d.ts +0 -19
  401. package/dist/types/components/post-banner/banner-types.d.ts +0 -2
  402. package/dist/types/components/post-banner/post-banner.d.ts +0 -49
  403. package/dist/types/components/post-breadcrumb/post-breadcrumb.d.ts +0 -30
  404. package/dist/types/components/post-breadcrumb-item/post-breadcrumb-item.d.ts +0 -16
  405. package/dist/types/components/post-closebutton/post-closebutton.d.ts +0 -7
  406. package/dist/types/components/post-footer/post-footer.d.ts +0 -23
  407. package/dist/types/components/post-header/post-header.d.ts +0 -24
  408. package/dist/types/components/post-language-option/post-language-option.d.ts +0 -45
  409. package/dist/types/components/post-language-switch/post-language-switch.d.ts +0 -31
  410. package/dist/types/components/post-language-switch/switch-variants.d.ts +0 -2
  411. package/dist/types/components/post-list/post-list.d.ts +0 -24
  412. package/dist/types/components/post-list-item/post-list-item.d.ts +0 -8
  413. package/dist/types/components/post-mainnavigation/post-mainnavigation.d.ts +0 -19
  414. package/dist/types/components/post-megadropdown/post-megadropdown.d.ts +0 -35
  415. package/dist/types/components/post-megadropdown-trigger/post-megadropdown-trigger.d.ts +0 -25
  416. package/dist/types/components/post-menu/post-menu.d.ts +0 -48
  417. package/dist/types/components/post-menu-item/post-menu-item.d.ts +0 -4
  418. package/dist/types/components/post-menu-trigger/post-menu-trigger.d.ts +0 -27
  419. package/dist/types/components/post-togglebutton/post-togglebutton.d.ts +0 -15
  420. package/dist/types/utils/breakpoints.d.ts +0 -11
  421. package/dist/types/utils/is-focusable.d.ts +0 -1
  422. package/loaders/attribute-observer.js +0 -25
  423. package/loaders/debounce.js +0 -10
  424. package/loaders/get-root.js +0 -9
  425. package/loaders/post-accordion-item2.js +0 -102
  426. package/loaders/post-avatar.js +0 -176
  427. package/loaders/post-back-to-top.d.ts +0 -11
  428. package/loaders/post-back-to-top.js +0 -103
  429. package/loaders/post-banner.d.ts +0 -11
  430. package/loaders/post-banner.js +0 -128
  431. package/loaders/post-breadcrumb-item.d.ts +0 -11
  432. package/loaders/post-breadcrumb-item.js +0 -6
  433. package/loaders/post-breadcrumb-item2.js +0 -82
  434. package/loaders/post-breadcrumb.d.ts +0 -11
  435. package/loaders/post-breadcrumb.js +0 -171
  436. package/loaders/post-closebutton.d.ts +0 -11
  437. package/loaders/post-closebutton.js +0 -37
  438. package/loaders/post-footer.d.ts +0 -11
  439. package/loaders/post-footer.js +0 -127
  440. package/loaders/post-header.d.ts +0 -11
  441. package/loaders/post-header.js +0 -279
  442. package/loaders/post-language-option.d.ts +0 -11
  443. package/loaders/post-language-option.js +0 -97
  444. package/loaders/post-language-switch.d.ts +0 -11
  445. package/loaders/post-language-switch.js +0 -149
  446. package/loaders/post-list-item.d.ts +0 -11
  447. package/loaders/post-list-item.js +0 -38
  448. package/loaders/post-list.js +0 -56
  449. package/loaders/post-mainnavigation.d.ts +0 -11
  450. package/loaders/post-mainnavigation.js +0 -51
  451. package/loaders/post-megadropdown-trigger.d.ts +0 -11
  452. package/loaders/post-megadropdown-trigger.js +0 -94
  453. package/loaders/post-megadropdown.d.ts +0 -11
  454. package/loaders/post-megadropdown.js +0 -96
  455. package/loaders/post-menu-item.d.ts +0 -11
  456. package/loaders/post-menu-item.js +0 -6
  457. package/loaders/post-menu-item2.js +0 -33
  458. package/loaders/post-menu-trigger.d.ts +0 -11
  459. package/loaders/post-menu-trigger.js +0 -6
  460. package/loaders/post-menu-trigger2.js +0 -102
  461. package/loaders/post-menu.d.ts +0 -11
  462. package/loaders/post-menu.js +0 -6
  463. package/loaders/post-menu2.js +0 -203
  464. package/loaders/post-togglebutton.d.ts +0 -11
  465. package/loaders/post-togglebutton.js +0 -64
  466. package/loaders/slide.js +0 -25
@@ -0,0 +1,4968 @@
1
+ import { proxyCustomElement, HTMLElement as HTMLElement$1, h, Host } from '@stencil/core/internal/client';
2
+ import { c as checkType } from './check-type.js';
3
+ import { v as version$1 } from './package.js';
4
+
5
+ /*!
6
+ * long-press-event - v@version@
7
+ * Pure JavaScript long-press-event
8
+ * https://github.com/john-doherty/long-press-event
9
+ * @author John Doherty <www.johndoherty.info>
10
+ * @license MIT
11
+ */
12
+ (function (window, document) {
13
+
14
+ // local timer object based on rAF
15
+ var timer = null;
16
+
17
+ // check if we're using a touch screen
18
+ var hasPointerEvents = (('PointerEvent' in window) || (window.navigator && 'msPointerEnabled' in window.navigator));
19
+ var isTouch = (('ontouchstart' in window) || (navigator.MaxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0));
20
+
21
+ // switch to pointer events or touch events if using a touch screen
22
+ var mouseDown = hasPointerEvents ? 'pointerdown' : isTouch ? 'touchstart' : 'mousedown';
23
+ var mouseUp = hasPointerEvents ? 'pointerup' : isTouch ? 'touchend' : 'mouseup';
24
+ var mouseMove = hasPointerEvents ? 'pointermove' : isTouch ? 'touchmove' : 'mousemove';
25
+ var mouseLeave = hasPointerEvents ? 'pointerleave' : isTouch ? 'touchleave' : 'mouseleave';
26
+
27
+ // track number of pixels the mouse moves during long press
28
+ var startX = 0; // mouse x position when timer started
29
+ var startY = 0; // mouse y position when timer started
30
+ var maxDiffX = 10; // max number of X pixels the mouse can move during long press before it is canceled
31
+ var maxDiffY = 10; // max number of Y pixels the mouse can move during long press before it is canceled
32
+
33
+ // patch CustomEvent to allow constructor creation (IE/Chrome)
34
+ if (typeof window.CustomEvent !== 'function') {
35
+
36
+ window.CustomEvent = function (event, params) {
37
+
38
+ params = params || { bubbles: false, cancelable: false, detail: undefined };
39
+
40
+ var evt = document.createEvent('CustomEvent');
41
+ evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
42
+ return evt;
43
+ };
44
+
45
+ window.CustomEvent.prototype = window.Event.prototype;
46
+ }
47
+
48
+ // requestAnimationFrame() shim by Paul Irish
49
+ window.requestAnimFrame = (function () {
50
+ return window.requestAnimationFrame ||
51
+ window.webkitRequestAnimationFrame ||
52
+ window.mozRequestAnimationFrame ||
53
+ window.oRequestAnimationFrame ||
54
+ window.msRequestAnimationFrame || function (callback) {
55
+ window.setTimeout(callback, 1000 / 60);
56
+ };
57
+ })();
58
+
59
+ /**
60
+ * Behaves the same as setTimeout except uses requestAnimationFrame() where possible for better performance
61
+ * @param {function} fn The callback function
62
+ * @param {int} delay The delay in milliseconds
63
+ * @returns {object} handle to the timeout object
64
+ */
65
+ function requestTimeout(fn, delay) {
66
+
67
+ if (!window.requestAnimationFrame && !window.webkitRequestAnimationFrame &&
68
+ !(window.mozRequestAnimationFrame && window.mozCancelRequestAnimationFrame) && // Firefox 5 ships without cancel support
69
+ !window.oRequestAnimationFrame && !window.msRequestAnimationFrame) return window.setTimeout(fn, delay);
70
+
71
+ var start = new Date().getTime();
72
+ var handle = {};
73
+
74
+ var loop = function () {
75
+ var current = new Date().getTime();
76
+ var delta = current - start;
77
+
78
+ if (delta >= delay) {
79
+ fn.call();
80
+ }
81
+ else {
82
+ handle.value = requestAnimFrame(loop);
83
+ }
84
+ };
85
+
86
+ handle.value = requestAnimFrame(loop);
87
+
88
+ return handle;
89
+ }
90
+
91
+ /**
92
+ * Behaves the same as clearTimeout except uses cancelRequestAnimationFrame() where possible for better performance
93
+ * @param {object} handle The callback function
94
+ * @returns {void}
95
+ */
96
+ function clearRequestTimeout(handle) {
97
+ if (handle) {
98
+ window.cancelAnimationFrame ? window.cancelAnimationFrame(handle.value) :
99
+ window.webkitCancelAnimationFrame ? window.webkitCancelAnimationFrame(handle.value) :
100
+ window.webkitCancelRequestAnimationFrame ? window.webkitCancelRequestAnimationFrame(handle.value) : /* Support for legacy API */
101
+ window.mozCancelRequestAnimationFrame ? window.mozCancelRequestAnimationFrame(handle.value) :
102
+ window.oCancelRequestAnimationFrame ? window.oCancelRequestAnimationFrame(handle.value) :
103
+ window.msCancelRequestAnimationFrame ? window.msCancelRequestAnimationFrame(handle.value) :
104
+ clearTimeout(handle);
105
+ }
106
+ }
107
+
108
+ /**
109
+ * Fires the 'long-press' event on element
110
+ * @param {MouseEvent|PointerEvent|TouchEvent} originalEvent The original event being fired
111
+ * @returns {void}
112
+ */
113
+ function fireLongPressEvent(originalEvent) {
114
+
115
+ clearLongPressTimer();
116
+
117
+ originalEvent = unifyEvent(originalEvent);
118
+
119
+ // fire the long-press event
120
+ var allowClickEvent = this.dispatchEvent(new CustomEvent('long-press', {
121
+ bubbles: true,
122
+ cancelable: true,
123
+
124
+ // custom event data (legacy)
125
+ detail: {
126
+ clientX: originalEvent.clientX,
127
+ clientY: originalEvent.clientY,
128
+ offsetX: originalEvent.offsetX,
129
+ offsetY: originalEvent.offsetY,
130
+ pageX: originalEvent.pageX,
131
+ pageY: originalEvent.pageY
132
+ },
133
+
134
+ // add coordinate data that would typically acompany a touch/click event
135
+ clientX: originalEvent.clientX,
136
+ clientY: originalEvent.clientY,
137
+ offsetX: originalEvent.offsetX,
138
+ offsetY: originalEvent.offsetY,
139
+ pageX: originalEvent.pageX,
140
+ pageY: originalEvent.pageY,
141
+ screenX: originalEvent.screenX,
142
+ screenY: originalEvent.screenY
143
+ }));
144
+
145
+ if (!allowClickEvent) {
146
+ // suppress the next click event if e.preventDefault() was called in long-press handler
147
+ document.addEventListener('click', function suppressEvent(e) {
148
+ document.removeEventListener('click', suppressEvent, true);
149
+ cancelEvent(e);
150
+ }, true);
151
+ }
152
+ }
153
+
154
+ /**
155
+ * consolidates mouse, touch, and Pointer events
156
+ * @param {MouseEvent|PointerEvent|TouchEvent} e The original event being fired
157
+ * @returns {MouseEvent|PointerEvent|Touch}
158
+ */
159
+ function unifyEvent(e) {
160
+ if (e.changedTouches !== undefined) {
161
+ return e.changedTouches[0];
162
+ }
163
+ return e;
164
+ }
165
+
166
+ /**
167
+ * method responsible for starting the long press timer
168
+ * @param {event} e - event object
169
+ * @returns {void}
170
+ */
171
+ function startLongPressTimer(e) {
172
+
173
+ clearLongPressTimer();
174
+
175
+ var el = e.target;
176
+
177
+ // get delay from html attribute if it exists, otherwise default to 1500
178
+ var longPressDelayInMs = parseInt(getNearestAttribute(el, 'data-long-press-delay', '1500'), 10); // default 1500
179
+
180
+ // start the timer
181
+ timer = requestTimeout(fireLongPressEvent.bind(el, e), longPressDelayInMs);
182
+ }
183
+
184
+ /**
185
+ * method responsible for clearing a pending long press timer
186
+ * @param {event} e - event object
187
+ * @returns {void}
188
+ */
189
+ function clearLongPressTimer(e) {
190
+ clearRequestTimeout(timer);
191
+ timer = null;
192
+ }
193
+
194
+ /**
195
+ * Cancels the current event
196
+ * @param {object} e - browser event object
197
+ * @returns {void}
198
+ */
199
+ function cancelEvent(e) {
200
+ e.stopImmediatePropagation();
201
+ e.preventDefault();
202
+ e.stopPropagation();
203
+ }
204
+
205
+ /**
206
+ * Starts the timer on mouse down and logs current position
207
+ * @param {object} e - browser event object
208
+ * @returns {void}
209
+ */
210
+ function mouseDownHandler(e) {
211
+ startX = e.clientX;
212
+ startY = e.clientY;
213
+ startLongPressTimer(e);
214
+ }
215
+
216
+ /**
217
+ * If the mouse moves n pixels during long-press, cancel the timer
218
+ * @param {object} e - browser event object
219
+ * @returns {void}
220
+ */
221
+ function mouseMoveHandler(e) {
222
+
223
+ // calculate total number of pixels the pointer has moved
224
+ var diffX = Math.abs(startX - e.clientX);
225
+ var diffY = Math.abs(startY - e.clientY);
226
+
227
+ // if pointer has moved more than allowed, cancel the long-press timer and therefore the event
228
+ if (diffX >= maxDiffX || diffY >= maxDiffY) {
229
+ clearLongPressTimer();
230
+ }
231
+ }
232
+
233
+ /**
234
+ * Gets attribute off HTML element or nearest parent
235
+ * @param {object} el - HTML element to retrieve attribute from
236
+ * @param {string} attributeName - name of the attribute
237
+ * @param {any} defaultValue - default value to return if no match found
238
+ * @returns {any} attribute value or defaultValue
239
+ */
240
+ function getNearestAttribute(el, attributeName, defaultValue) {
241
+
242
+ // walk up the dom tree looking for data-action and data-trigger
243
+ while (el && el !== document.documentElement) {
244
+
245
+ var attributeValue = el.getAttribute(attributeName);
246
+
247
+ if (attributeValue) {
248
+ return attributeValue;
249
+ }
250
+
251
+ el = el.parentNode;
252
+ }
253
+
254
+ return defaultValue;
255
+ }
256
+
257
+ // hook events that clear a pending long press event
258
+ document.addEventListener(mouseUp, clearLongPressTimer, true);
259
+ document.addEventListener(mouseLeave, clearLongPressTimer, true);
260
+ document.addEventListener(mouseMove, mouseMoveHandler, true);
261
+ document.addEventListener('wheel', clearLongPressTimer, true);
262
+ document.addEventListener('scroll', clearLongPressTimer, true);
263
+ document.addEventListener('contextmenu', clearLongPressTimer, true);
264
+
265
+ // hook events that can trigger a long press event
266
+ document.addEventListener(mouseDown, mouseDownHandler, true); // <- start
267
+
268
+ }(window, document));
269
+
270
+ var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
271
+
272
+ function getDefaultExportFromCjs (x) {
273
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
274
+ }
275
+
276
+ var focusable = {exports: {}};
277
+
278
+ var focusRelevant = {exports: {}};
279
+
280
+ var parents = {exports: {}};
281
+
282
+ var contextToElement = {exports: {}};
283
+
284
+ var nodeArray = {exports: {}};
285
+
286
+ (function (module, exports) {
287
+
288
+ Object.defineProperty(exports, "__esModule", {
289
+ value: true
290
+ });
291
+
292
+ exports.default = function (input) {
293
+ if (!input) {
294
+ return [];
295
+ }
296
+
297
+ if (Array.isArray(input)) {
298
+ return input;
299
+ }
300
+
301
+ // instanceof Node - does not work with iframes
302
+ if (input.nodeType !== undefined) {
303
+ return [input];
304
+ }
305
+
306
+ if (typeof input === 'string') {
307
+ input = document.querySelectorAll(input);
308
+ }
309
+
310
+ if (input.length !== undefined) {
311
+ return [].slice.call(input, 0);
312
+ }
313
+
314
+ throw new TypeError('unexpected input ' + String(input));
315
+ };
316
+
317
+ module.exports = exports['default'];
318
+ // input may be undefined, selector-tring, Node, NodeList, HTMLCollection, array of Nodes
319
+ // yes, to some extent this is a bad replica of jQuery's constructor function
320
+
321
+ }(nodeArray, nodeArray.exports));
322
+
323
+ (function (module, exports) {
324
+
325
+ Object.defineProperty(exports, "__esModule", {
326
+ value: true
327
+ });
328
+
329
+ exports.default = function (_ref) {
330
+ var context = _ref.context,
331
+ _ref$label = _ref.label,
332
+ label = _ref$label === undefined ? 'context-to-element' : _ref$label,
333
+ resolveDocument = _ref.resolveDocument,
334
+ defaultToDocument = _ref.defaultToDocument;
335
+
336
+ var element = (0, _nodeArray2.default)(context)[0];
337
+
338
+ if (resolveDocument && element && element.nodeType === Node.DOCUMENT_NODE) {
339
+ element = element.documentElement;
340
+ }
341
+
342
+ if (!element && defaultToDocument) {
343
+ return document.documentElement;
344
+ }
345
+
346
+ if (!element) {
347
+ throw new TypeError(label + ' requires valid options.context');
348
+ }
349
+
350
+ if (element.nodeType !== Node.ELEMENT_NODE && element.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {
351
+ throw new TypeError(label + ' requires options.context to be an Element');
352
+ }
353
+
354
+ return element;
355
+ };
356
+
357
+ var _nodeArray = nodeArray.exports;
358
+
359
+ var _nodeArray2 = _interopRequireDefault(_nodeArray);
360
+
361
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
362
+
363
+ module.exports = exports['default'];
364
+
365
+ }(contextToElement, contextToElement.exports));
366
+
367
+ (function (module, exports) {
368
+
369
+ Object.defineProperty(exports, "__esModule", {
370
+ value: true
371
+ });
372
+
373
+ exports.default = function () {
374
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
375
+ context = _ref.context;
376
+
377
+ var list = [];
378
+ var element = (0, _contextToElement2.default)({
379
+ label: 'get/parents',
380
+ context: context
381
+ });
382
+
383
+ while (element) {
384
+ list.push(element);
385
+ // IE does know support parentElement on SVGElement
386
+ element = element.parentNode;
387
+ if (element && element.nodeType !== Node.ELEMENT_NODE) {
388
+ element = null;
389
+ }
390
+ }
391
+
392
+ return list;
393
+ };
394
+
395
+ var _contextToElement = contextToElement.exports;
396
+
397
+ var _contextToElement2 = _interopRequireDefault(_contextToElement);
398
+
399
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
400
+
401
+ module.exports = exports['default'];
402
+
403
+ // [elem, elem.parent, elem.parent.parent, …, html]
404
+ // will not contain the shadowRoot (DOCUMENT_FRAGMENT_NODE) and shadowHost
405
+
406
+ }(parents, parents.exports));
407
+
408
+ var elementMatches = {exports: {}};
409
+
410
+ (function (module, exports) {
411
+
412
+ Object.defineProperty(exports, "__esModule", {
413
+ value: true
414
+ });
415
+ exports.default = elementMatches;
416
+
417
+ // Element.prototype.matches may be available at a different name
418
+ // https://developer.mozilla.org/en/docs/Web/API/Element/matches
419
+
420
+ var names = ['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector'];
421
+ var name = null;
422
+
423
+ function findMethodName(element) {
424
+ names.some(function (_name) {
425
+ if (!element[_name]) {
426
+ return false;
427
+ }
428
+
429
+ name = _name;
430
+ return true;
431
+ });
432
+ }
433
+
434
+ function elementMatches(element, selector) {
435
+ if (!name) {
436
+ findMethodName(element);
437
+ }
438
+
439
+ return element[name](selector);
440
+ }
441
+ module.exports = exports['default'];
442
+
443
+ }(elementMatches, elementMatches.exports));
444
+
445
+ var tabindexValue = {exports: {}};
446
+
447
+ var validTabindex = {exports: {}};
448
+
449
+ var supports = {exports: {}};
450
+
451
+ var detectFocus = {exports: {}};
452
+
453
+ var platform$1 = {exports: {}};
454
+
455
+ var platform = {exports: {}};
456
+
457
+ /*!
458
+ * Platform.js <https://mths.be/platform>
459
+ * Copyright 2014-2016 Benjamin Tan <https://demoneaux.github.io/>
460
+ * Copyright 2011-2013 John-David Dalton <http://allyoucanleet.com/>
461
+ * Available under MIT license <https://mths.be/mit>
462
+ */
463
+
464
+ (function (module, exports) {
465
+ (function() {
466
+
467
+ /** Used to determine if values are of the language type `Object`. */
468
+ var objectTypes = {
469
+ 'function': true,
470
+ 'object': true
471
+ };
472
+
473
+ /** Used as a reference to the global object. */
474
+ var root = (objectTypes[typeof window] && window) || this;
475
+
476
+ /** Backup possible global object. */
477
+ var oldRoot = root;
478
+
479
+ /** Detect free variable `exports`. */
480
+ var freeExports = exports;
481
+
482
+ /** Detect free variable `module`. */
483
+ var freeModule = module && !module.nodeType && module;
484
+
485
+ /** Detect free variable `global` from Node.js or Browserified code and use it as `root`. */
486
+ var freeGlobal = freeExports && freeModule && typeof commonjsGlobal == 'object' && commonjsGlobal;
487
+ if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal)) {
488
+ root = freeGlobal;
489
+ }
490
+
491
+ /**
492
+ * Used as the maximum length of an array-like object.
493
+ * See the [ES6 spec](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength)
494
+ * for more details.
495
+ */
496
+ var maxSafeInteger = Math.pow(2, 53) - 1;
497
+
498
+ /** Regular expression to detect Opera. */
499
+ var reOpera = /\bOpera/;
500
+
501
+ /** Possible global object. */
502
+ var thisBinding = this;
503
+
504
+ /** Used for native method references. */
505
+ var objectProto = Object.prototype;
506
+
507
+ /** Used to check for own properties of an object. */
508
+ var hasOwnProperty = objectProto.hasOwnProperty;
509
+
510
+ /** Used to resolve the internal `[[Class]]` of values. */
511
+ var toString = objectProto.toString;
512
+
513
+ /*--------------------------------------------------------------------------*/
514
+
515
+ /**
516
+ * Capitalizes a string value.
517
+ *
518
+ * @private
519
+ * @param {string} string The string to capitalize.
520
+ * @returns {string} The capitalized string.
521
+ */
522
+ function capitalize(string) {
523
+ string = String(string);
524
+ return string.charAt(0).toUpperCase() + string.slice(1);
525
+ }
526
+
527
+ /**
528
+ * A utility function to clean up the OS name.
529
+ *
530
+ * @private
531
+ * @param {string} os The OS name to clean up.
532
+ * @param {string} [pattern] A `RegExp` pattern matching the OS name.
533
+ * @param {string} [label] A label for the OS.
534
+ */
535
+ function cleanupOS(os, pattern, label) {
536
+ // Platform tokens are defined at:
537
+ // http://msdn.microsoft.com/en-us/library/ms537503(VS.85).aspx
538
+ // http://web.archive.org/web/20081122053950/http://msdn.microsoft.com/en-us/library/ms537503(VS.85).aspx
539
+ var data = {
540
+ '10.0': '10',
541
+ '6.4': '10 Technical Preview',
542
+ '6.3': '8.1',
543
+ '6.2': '8',
544
+ '6.1': 'Server 2008 R2 / 7',
545
+ '6.0': 'Server 2008 / Vista',
546
+ '5.2': 'Server 2003 / XP 64-bit',
547
+ '5.1': 'XP',
548
+ '5.01': '2000 SP1',
549
+ '5.0': '2000',
550
+ '4.0': 'NT',
551
+ '4.90': 'ME'
552
+ };
553
+ // Detect Windows version from platform tokens.
554
+ if (pattern && label && /^Win/i.test(os) && !/^Windows Phone /i.test(os) &&
555
+ (data = data[/[\d.]+$/.exec(os)])) {
556
+ os = 'Windows ' + data;
557
+ }
558
+ // Correct character case and cleanup string.
559
+ os = String(os);
560
+
561
+ if (pattern && label) {
562
+ os = os.replace(RegExp(pattern, 'i'), label);
563
+ }
564
+
565
+ os = format(
566
+ os.replace(/ ce$/i, ' CE')
567
+ .replace(/\bhpw/i, 'web')
568
+ .replace(/\bMacintosh\b/, 'Mac OS')
569
+ .replace(/_PowerPC\b/i, ' OS')
570
+ .replace(/\b(OS X) [^ \d]+/i, '$1')
571
+ .replace(/\bMac (OS X)\b/, '$1')
572
+ .replace(/\/(\d)/, ' $1')
573
+ .replace(/_/g, '.')
574
+ .replace(/(?: BePC|[ .]*fc[ \d.]+)$/i, '')
575
+ .replace(/\bx86\.64\b/gi, 'x86_64')
576
+ .replace(/\b(Windows Phone) OS\b/, '$1')
577
+ .replace(/\b(Chrome OS \w+) [\d.]+\b/, '$1')
578
+ .split(' on ')[0]
579
+ );
580
+
581
+ return os;
582
+ }
583
+
584
+ /**
585
+ * An iteration utility for arrays and objects.
586
+ *
587
+ * @private
588
+ * @param {Array|Object} object The object to iterate over.
589
+ * @param {Function} callback The function called per iteration.
590
+ */
591
+ function each(object, callback) {
592
+ var index = -1,
593
+ length = object ? object.length : 0;
594
+
595
+ if (typeof length == 'number' && length > -1 && length <= maxSafeInteger) {
596
+ while (++index < length) {
597
+ callback(object[index], index, object);
598
+ }
599
+ } else {
600
+ forOwn(object, callback);
601
+ }
602
+ }
603
+
604
+ /**
605
+ * Trim and conditionally capitalize string values.
606
+ *
607
+ * @private
608
+ * @param {string} string The string to format.
609
+ * @returns {string} The formatted string.
610
+ */
611
+ function format(string) {
612
+ string = trim(string);
613
+ return /^(?:webOS|i(?:OS|P))/.test(string)
614
+ ? string
615
+ : capitalize(string);
616
+ }
617
+
618
+ /**
619
+ * Iterates over an object's own properties, executing the `callback` for each.
620
+ *
621
+ * @private
622
+ * @param {Object} object The object to iterate over.
623
+ * @param {Function} callback The function executed per own property.
624
+ */
625
+ function forOwn(object, callback) {
626
+ for (var key in object) {
627
+ if (hasOwnProperty.call(object, key)) {
628
+ callback(object[key], key, object);
629
+ }
630
+ }
631
+ }
632
+
633
+ /**
634
+ * Gets the internal `[[Class]]` of a value.
635
+ *
636
+ * @private
637
+ * @param {*} value The value.
638
+ * @returns {string} The `[[Class]]`.
639
+ */
640
+ function getClassOf(value) {
641
+ return value == null
642
+ ? capitalize(value)
643
+ : toString.call(value).slice(8, -1);
644
+ }
645
+
646
+ /**
647
+ * Host objects can return type values that are different from their actual
648
+ * data type. The objects we are concerned with usually return non-primitive
649
+ * types of "object", "function", or "unknown".
650
+ *
651
+ * @private
652
+ * @param {*} object The owner of the property.
653
+ * @param {string} property The property to check.
654
+ * @returns {boolean} Returns `true` if the property value is a non-primitive, else `false`.
655
+ */
656
+ function isHostType(object, property) {
657
+ var type = object != null ? typeof object[property] : 'number';
658
+ return !/^(?:boolean|number|string|undefined)$/.test(type) &&
659
+ (type == 'object' ? !!object[property] : true);
660
+ }
661
+
662
+ /**
663
+ * Prepares a string for use in a `RegExp` by making hyphens and spaces optional.
664
+ *
665
+ * @private
666
+ * @param {string} string The string to qualify.
667
+ * @returns {string} The qualified string.
668
+ */
669
+ function qualify(string) {
670
+ return String(string).replace(/([ -])(?!$)/g, '$1?');
671
+ }
672
+
673
+ /**
674
+ * A bare-bones `Array#reduce` like utility function.
675
+ *
676
+ * @private
677
+ * @param {Array} array The array to iterate over.
678
+ * @param {Function} callback The function called per iteration.
679
+ * @returns {*} The accumulated result.
680
+ */
681
+ function reduce(array, callback) {
682
+ var accumulator = null;
683
+ each(array, function(value, index) {
684
+ accumulator = callback(accumulator, value, index, array);
685
+ });
686
+ return accumulator;
687
+ }
688
+
689
+ /**
690
+ * Removes leading and trailing whitespace from a string.
691
+ *
692
+ * @private
693
+ * @param {string} string The string to trim.
694
+ * @returns {string} The trimmed string.
695
+ */
696
+ function trim(string) {
697
+ return String(string).replace(/^ +| +$/g, '');
698
+ }
699
+
700
+ /*--------------------------------------------------------------------------*/
701
+
702
+ /**
703
+ * Creates a new platform object.
704
+ *
705
+ * @memberOf platform
706
+ * @param {Object|string} [ua=navigator.userAgent] The user agent string or
707
+ * context object.
708
+ * @returns {Object} A platform object.
709
+ */
710
+ function parse(ua) {
711
+
712
+ /** The environment context object. */
713
+ var context = root;
714
+
715
+ /** Used to flag when a custom context is provided. */
716
+ var isCustomContext = ua && typeof ua == 'object' && getClassOf(ua) != 'String';
717
+
718
+ // Juggle arguments.
719
+ if (isCustomContext) {
720
+ context = ua;
721
+ ua = null;
722
+ }
723
+
724
+ /** Browser navigator object. */
725
+ var nav = context.navigator || {};
726
+
727
+ /** Browser user agent string. */
728
+ var userAgent = nav.userAgent || '';
729
+
730
+ ua || (ua = userAgent);
731
+
732
+ /** Used to flag when `thisBinding` is the [ModuleScope]. */
733
+ var isModuleScope = isCustomContext || thisBinding == oldRoot;
734
+
735
+ /** Used to detect if browser is like Chrome. */
736
+ var likeChrome = isCustomContext
737
+ ? !!nav.likeChrome
738
+ : /\bChrome\b/.test(ua) && !/internal|\n/i.test(toString.toString());
739
+
740
+ /** Internal `[[Class]]` value shortcuts. */
741
+ var objectClass = 'Object',
742
+ airRuntimeClass = isCustomContext ? objectClass : 'ScriptBridgingProxyObject',
743
+ enviroClass = isCustomContext ? objectClass : 'Environment',
744
+ javaClass = (isCustomContext && context.java) ? 'JavaPackage' : getClassOf(context.java),
745
+ phantomClass = isCustomContext ? objectClass : 'RuntimeObject';
746
+
747
+ /** Detect Java environments. */
748
+ var java = /\bJava/.test(javaClass) && context.java;
749
+
750
+ /** Detect Rhino. */
751
+ var rhino = java && getClassOf(context.environment) == enviroClass;
752
+
753
+ /** A character to represent alpha. */
754
+ var alpha = java ? 'a' : '\u03b1';
755
+
756
+ /** A character to represent beta. */
757
+ var beta = java ? 'b' : '\u03b2';
758
+
759
+ /** Browser document object. */
760
+ var doc = context.document || {};
761
+
762
+ /**
763
+ * Detect Opera browser (Presto-based).
764
+ * http://www.howtocreate.co.uk/operaStuff/operaObject.html
765
+ * http://dev.opera.com/articles/view/opera-mini-web-content-authoring-guidelines/#operamini
766
+ */
767
+ var opera = context.operamini || context.opera;
768
+
769
+ /** Opera `[[Class]]`. */
770
+ var operaClass = reOpera.test(operaClass = (isCustomContext && opera) ? opera['[[Class]]'] : getClassOf(opera))
771
+ ? operaClass
772
+ : (opera = null);
773
+
774
+ /*------------------------------------------------------------------------*/
775
+
776
+ /** Temporary variable used over the script's lifetime. */
777
+ var data;
778
+
779
+ /** The CPU architecture. */
780
+ var arch = ua;
781
+
782
+ /** Platform description array. */
783
+ var description = [];
784
+
785
+ /** Platform alpha/beta indicator. */
786
+ var prerelease = null;
787
+
788
+ /** A flag to indicate that environment features should be used to resolve the platform. */
789
+ var useFeatures = ua == userAgent;
790
+
791
+ /** The browser/environment version. */
792
+ var version = useFeatures && opera && typeof opera.version == 'function' && opera.version();
793
+
794
+ /** A flag to indicate if the OS ends with "/ Version" */
795
+ var isSpecialCasedOS;
796
+
797
+ /* Detectable layout engines (order is important). */
798
+ var layout = getLayout([
799
+ { 'label': 'EdgeHTML', 'pattern': 'Edge' },
800
+ 'Trident',
801
+ { 'label': 'WebKit', 'pattern': 'AppleWebKit' },
802
+ 'iCab',
803
+ 'Presto',
804
+ 'NetFront',
805
+ 'Tasman',
806
+ 'KHTML',
807
+ 'Gecko'
808
+ ]);
809
+
810
+ /* Detectable browser names (order is important). */
811
+ var name = getName([
812
+ 'Adobe AIR',
813
+ 'Arora',
814
+ 'Avant Browser',
815
+ 'Breach',
816
+ 'Camino',
817
+ 'Epiphany',
818
+ 'Fennec',
819
+ 'Flock',
820
+ 'Galeon',
821
+ 'GreenBrowser',
822
+ 'iCab',
823
+ 'Iceweasel',
824
+ 'K-Meleon',
825
+ 'Konqueror',
826
+ 'Lunascape',
827
+ 'Maxthon',
828
+ { 'label': 'Microsoft Edge', 'pattern': 'Edge' },
829
+ 'Midori',
830
+ 'Nook Browser',
831
+ 'PaleMoon',
832
+ 'PhantomJS',
833
+ 'Raven',
834
+ 'Rekonq',
835
+ 'RockMelt',
836
+ 'SeaMonkey',
837
+ { 'label': 'Silk', 'pattern': '(?:Cloud9|Silk-Accelerated)' },
838
+ 'Sleipnir',
839
+ 'SlimBrowser',
840
+ { 'label': 'SRWare Iron', 'pattern': 'Iron' },
841
+ 'Sunrise',
842
+ 'Swiftfox',
843
+ 'WebPositive',
844
+ 'Opera Mini',
845
+ { 'label': 'Opera Mini', 'pattern': 'OPiOS' },
846
+ 'Opera',
847
+ { 'label': 'Opera', 'pattern': 'OPR' },
848
+ 'Chrome',
849
+ { 'label': 'Chrome Mobile', 'pattern': '(?:CriOS|CrMo)' },
850
+ { 'label': 'Firefox', 'pattern': '(?:Firefox|Minefield)' },
851
+ { 'label': 'Firefox for iOS', 'pattern': 'FxiOS' },
852
+ { 'label': 'IE', 'pattern': 'IEMobile' },
853
+ { 'label': 'IE', 'pattern': 'MSIE' },
854
+ 'Safari'
855
+ ]);
856
+
857
+ /* Detectable products (order is important). */
858
+ var product = getProduct([
859
+ { 'label': 'BlackBerry', 'pattern': 'BB10' },
860
+ 'BlackBerry',
861
+ { 'label': 'Galaxy S', 'pattern': 'GT-I9000' },
862
+ { 'label': 'Galaxy S2', 'pattern': 'GT-I9100' },
863
+ { 'label': 'Galaxy S3', 'pattern': 'GT-I9300' },
864
+ { 'label': 'Galaxy S4', 'pattern': 'GT-I9500' },
865
+ 'Google TV',
866
+ 'Lumia',
867
+ 'iPad',
868
+ 'iPod',
869
+ 'iPhone',
870
+ 'Kindle',
871
+ { 'label': 'Kindle Fire', 'pattern': '(?:Cloud9|Silk-Accelerated)' },
872
+ 'Nexus',
873
+ 'Nook',
874
+ 'PlayBook',
875
+ 'PlayStation 3',
876
+ 'PlayStation 4',
877
+ 'PlayStation Vita',
878
+ 'TouchPad',
879
+ 'Transformer',
880
+ { 'label': 'Wii U', 'pattern': 'WiiU' },
881
+ 'Wii',
882
+ 'Xbox One',
883
+ { 'label': 'Xbox 360', 'pattern': 'Xbox' },
884
+ 'Xoom'
885
+ ]);
886
+
887
+ /* Detectable manufacturers. */
888
+ var manufacturer = getManufacturer({
889
+ 'Apple': { 'iPad': 1, 'iPhone': 1, 'iPod': 1 },
890
+ 'Archos': {},
891
+ 'Amazon': { 'Kindle': 1, 'Kindle Fire': 1 },
892
+ 'Asus': { 'Transformer': 1 },
893
+ 'Barnes & Noble': { 'Nook': 1 },
894
+ 'BlackBerry': { 'PlayBook': 1 },
895
+ 'Google': { 'Google TV': 1, 'Nexus': 1 },
896
+ 'HP': { 'TouchPad': 1 },
897
+ 'HTC': {},
898
+ 'LG': {},
899
+ 'Microsoft': { 'Xbox': 1, 'Xbox One': 1 },
900
+ 'Motorola': { 'Xoom': 1 },
901
+ 'Nintendo': { 'Wii U': 1, 'Wii': 1 },
902
+ 'Nokia': { 'Lumia': 1 },
903
+ 'Samsung': { 'Galaxy S': 1, 'Galaxy S2': 1, 'Galaxy S3': 1, 'Galaxy S4': 1 },
904
+ 'Sony': { 'PlayStation 4': 1, 'PlayStation 3': 1, 'PlayStation Vita': 1 }
905
+ });
906
+
907
+ /* Detectable operating systems (order is important). */
908
+ var os = getOS([
909
+ 'Windows Phone',
910
+ 'Android',
911
+ 'CentOS',
912
+ { 'label': 'Chrome OS', 'pattern': 'CrOS' },
913
+ 'Debian',
914
+ 'Fedora',
915
+ 'FreeBSD',
916
+ 'Gentoo',
917
+ 'Haiku',
918
+ 'Kubuntu',
919
+ 'Linux Mint',
920
+ 'OpenBSD',
921
+ 'Red Hat',
922
+ 'SuSE',
923
+ 'Ubuntu',
924
+ 'Xubuntu',
925
+ 'Cygwin',
926
+ 'Symbian OS',
927
+ 'hpwOS',
928
+ 'webOS ',
929
+ 'webOS',
930
+ 'Tablet OS',
931
+ 'Linux',
932
+ 'Mac OS X',
933
+ 'Macintosh',
934
+ 'Mac',
935
+ 'Windows 98;',
936
+ 'Windows '
937
+ ]);
938
+
939
+ /*------------------------------------------------------------------------*/
940
+
941
+ /**
942
+ * Picks the layout engine from an array of guesses.
943
+ *
944
+ * @private
945
+ * @param {Array} guesses An array of guesses.
946
+ * @returns {null|string} The detected layout engine.
947
+ */
948
+ function getLayout(guesses) {
949
+ return reduce(guesses, function(result, guess) {
950
+ return result || RegExp('\\b' + (
951
+ guess.pattern || qualify(guess)
952
+ ) + '\\b', 'i').exec(ua) && (guess.label || guess);
953
+ });
954
+ }
955
+
956
+ /**
957
+ * Picks the manufacturer from an array of guesses.
958
+ *
959
+ * @private
960
+ * @param {Array} guesses An object of guesses.
961
+ * @returns {null|string} The detected manufacturer.
962
+ */
963
+ function getManufacturer(guesses) {
964
+ return reduce(guesses, function(result, value, key) {
965
+ // Lookup the manufacturer by product or scan the UA for the manufacturer.
966
+ return result || (
967
+ value[product] ||
968
+ value[/^[a-z]+(?: +[a-z]+\b)*/i.exec(product)] ||
969
+ RegExp('\\b' + qualify(key) + '(?:\\b|\\w*\\d)', 'i').exec(ua)
970
+ ) && key;
971
+ });
972
+ }
973
+
974
+ /**
975
+ * Picks the browser name from an array of guesses.
976
+ *
977
+ * @private
978
+ * @param {Array} guesses An array of guesses.
979
+ * @returns {null|string} The detected browser name.
980
+ */
981
+ function getName(guesses) {
982
+ return reduce(guesses, function(result, guess) {
983
+ return result || RegExp('\\b' + (
984
+ guess.pattern || qualify(guess)
985
+ ) + '\\b', 'i').exec(ua) && (guess.label || guess);
986
+ });
987
+ }
988
+
989
+ /**
990
+ * Picks the OS name from an array of guesses.
991
+ *
992
+ * @private
993
+ * @param {Array} guesses An array of guesses.
994
+ * @returns {null|string} The detected OS name.
995
+ */
996
+ function getOS(guesses) {
997
+ return reduce(guesses, function(result, guess) {
998
+ var pattern = guess.pattern || qualify(guess);
999
+ if (!result && (result =
1000
+ RegExp('\\b' + pattern + '(?:/[\\d.]+|[ \\w.]*)', 'i').exec(ua)
1001
+ )) {
1002
+ result = cleanupOS(result, pattern, guess.label || guess);
1003
+ }
1004
+ return result;
1005
+ });
1006
+ }
1007
+
1008
+ /**
1009
+ * Picks the product name from an array of guesses.
1010
+ *
1011
+ * @private
1012
+ * @param {Array} guesses An array of guesses.
1013
+ * @returns {null|string} The detected product name.
1014
+ */
1015
+ function getProduct(guesses) {
1016
+ return reduce(guesses, function(result, guess) {
1017
+ var pattern = guess.pattern || qualify(guess);
1018
+ if (!result && (result =
1019
+ RegExp('\\b' + pattern + ' *\\d+[.\\w_]*', 'i').exec(ua) ||
1020
+ RegExp('\\b' + pattern + '(?:; *(?:[a-z]+[_-])?[a-z]+\\d+|[^ ();-]*)', 'i').exec(ua)
1021
+ )) {
1022
+ // Split by forward slash and append product version if needed.
1023
+ if ((result = String((guess.label && !RegExp(pattern, 'i').test(guess.label)) ? guess.label : result).split('/'))[1] && !/[\d.]+/.test(result[0])) {
1024
+ result[0] += ' ' + result[1];
1025
+ }
1026
+ // Correct character case and cleanup string.
1027
+ guess = guess.label || guess;
1028
+ result = format(result[0]
1029
+ .replace(RegExp(pattern, 'i'), guess)
1030
+ .replace(RegExp('; *(?:' + guess + '[_-])?', 'i'), ' ')
1031
+ .replace(RegExp('(' + guess + ')[-_.]?(\\w)', 'i'), '$1 $2'));
1032
+ }
1033
+ return result;
1034
+ });
1035
+ }
1036
+
1037
+ /**
1038
+ * Resolves the version using an array of UA patterns.
1039
+ *
1040
+ * @private
1041
+ * @param {Array} patterns An array of UA patterns.
1042
+ * @returns {null|string} The detected version.
1043
+ */
1044
+ function getVersion(patterns) {
1045
+ return reduce(patterns, function(result, pattern) {
1046
+ return result || (RegExp(pattern +
1047
+ '(?:-[\\d.]+/|(?: for [\\w-]+)?[ /-])([\\d.]+[^ ();/_-]*)', 'i').exec(ua) || 0)[1] || null;
1048
+ });
1049
+ }
1050
+
1051
+ /**
1052
+ * Returns `platform.description` when the platform object is coerced to a string.
1053
+ *
1054
+ * @name toString
1055
+ * @memberOf platform
1056
+ * @returns {string} Returns `platform.description` if available, else an empty string.
1057
+ */
1058
+ function toStringPlatform() {
1059
+ return this.description || '';
1060
+ }
1061
+
1062
+ /*------------------------------------------------------------------------*/
1063
+
1064
+ // Convert layout to an array so we can add extra details.
1065
+ layout && (layout = [layout]);
1066
+
1067
+ // Detect product names that contain their manufacturer's name.
1068
+ if (manufacturer && !product) {
1069
+ product = getProduct([manufacturer]);
1070
+ }
1071
+ // Clean up Google TV.
1072
+ if ((data = /\bGoogle TV\b/.exec(product))) {
1073
+ product = data[0];
1074
+ }
1075
+ // Detect simulators.
1076
+ if (/\bSimulator\b/i.test(ua)) {
1077
+ product = (product ? product + ' ' : '') + 'Simulator';
1078
+ }
1079
+ // Detect Opera Mini 8+ running in Turbo/Uncompressed mode on iOS.
1080
+ if (name == 'Opera Mini' && /\bOPiOS\b/.test(ua)) {
1081
+ description.push('running in Turbo/Uncompressed mode');
1082
+ }
1083
+ // Detect IE Mobile 11.
1084
+ if (name == 'IE' && /\blike iPhone OS\b/.test(ua)) {
1085
+ data = parse(ua.replace(/like iPhone OS/, ''));
1086
+ manufacturer = data.manufacturer;
1087
+ product = data.product;
1088
+ }
1089
+ // Detect iOS.
1090
+ else if (/^iP/.test(product)) {
1091
+ name || (name = 'Safari');
1092
+ os = 'iOS' + ((data = / OS ([\d_]+)/i.exec(ua))
1093
+ ? ' ' + data[1].replace(/_/g, '.')
1094
+ : '');
1095
+ }
1096
+ // Detect Kubuntu.
1097
+ else if (name == 'Konqueror' && !/buntu/i.test(os)) {
1098
+ os = 'Kubuntu';
1099
+ }
1100
+ // Detect Android browsers.
1101
+ else if ((manufacturer && manufacturer != 'Google' &&
1102
+ ((/Chrome/.test(name) && !/\bMobile Safari\b/i.test(ua)) || /\bVita\b/.test(product))) ||
1103
+ (/\bAndroid\b/.test(os) && /^Chrome/.test(name) && /\bVersion\//i.test(ua))) {
1104
+ name = 'Android Browser';
1105
+ os = /\bAndroid\b/.test(os) ? os : 'Android';
1106
+ }
1107
+ // Detect Silk desktop/accelerated modes.
1108
+ else if (name == 'Silk') {
1109
+ if (!/\bMobi/i.test(ua)) {
1110
+ os = 'Android';
1111
+ description.unshift('desktop mode');
1112
+ }
1113
+ if (/Accelerated *= *true/i.test(ua)) {
1114
+ description.unshift('accelerated');
1115
+ }
1116
+ }
1117
+ // Detect PaleMoon identifying as Firefox.
1118
+ else if (name == 'PaleMoon' && (data = /\bFirefox\/([\d.]+)\b/.exec(ua))) {
1119
+ description.push('identifying as Firefox ' + data[1]);
1120
+ }
1121
+ // Detect Firefox OS and products running Firefox.
1122
+ else if (name == 'Firefox' && (data = /\b(Mobile|Tablet|TV)\b/i.exec(ua))) {
1123
+ os || (os = 'Firefox OS');
1124
+ product || (product = data[1]);
1125
+ }
1126
+ // Detect false positives for Firefox/Safari.
1127
+ else if (!name || (data = !/\bMinefield\b/i.test(ua) && /\b(?:Firefox|Safari)\b/.exec(name))) {
1128
+ // Escape the `/` for Firefox 1.
1129
+ if (name && !product && /[\/,]|^[^(]+?\)/.test(ua.slice(ua.indexOf(data + '/') + 8))) {
1130
+ // Clear name of false positives.
1131
+ name = null;
1132
+ }
1133
+ // Reassign a generic name.
1134
+ if ((data = product || manufacturer || os) &&
1135
+ (product || manufacturer || /\b(?:Android|Symbian OS|Tablet OS|webOS)\b/.test(os))) {
1136
+ name = /[a-z]+(?: Hat)?/i.exec(/\bAndroid\b/.test(os) ? os : data) + ' Browser';
1137
+ }
1138
+ }
1139
+ // Detect non-Opera (Presto-based) versions (order is important).
1140
+ if (!version) {
1141
+ version = getVersion([
1142
+ '(?:Cloud9|CriOS|CrMo|Edge|FxiOS|IEMobile|Iron|Opera ?Mini|OPiOS|OPR|Raven|Silk(?!/[\\d.]+$))',
1143
+ 'Version',
1144
+ qualify(name),
1145
+ '(?:Firefox|Minefield|NetFront)'
1146
+ ]);
1147
+ }
1148
+ // Detect stubborn layout engines.
1149
+ if ((data =
1150
+ layout == 'iCab' && parseFloat(version) > 3 && 'WebKit' ||
1151
+ /\bOpera\b/.test(name) && (/\bOPR\b/.test(ua) ? 'Blink' : 'Presto') ||
1152
+ /\b(?:Midori|Nook|Safari)\b/i.test(ua) && !/^(?:Trident|EdgeHTML)$/.test(layout) && 'WebKit' ||
1153
+ !layout && /\bMSIE\b/i.test(ua) && (os == 'Mac OS' ? 'Tasman' : 'Trident') ||
1154
+ layout == 'WebKit' && /\bPlayStation\b(?! Vita\b)/i.test(name) && 'NetFront'
1155
+ )) {
1156
+ layout = [data];
1157
+ }
1158
+ // Detect Windows Phone 7 desktop mode.
1159
+ if (name == 'IE' && (data = (/; *(?:XBLWP|ZuneWP)(\d+)/i.exec(ua) || 0)[1])) {
1160
+ name += ' Mobile';
1161
+ os = 'Windows Phone ' + (/\+$/.test(data) ? data : data + '.x');
1162
+ description.unshift('desktop mode');
1163
+ }
1164
+ // Detect Windows Phone 8.x desktop mode.
1165
+ else if (/\bWPDesktop\b/i.test(ua)) {
1166
+ name = 'IE Mobile';
1167
+ os = 'Windows Phone 8.x';
1168
+ description.unshift('desktop mode');
1169
+ version || (version = (/\brv:([\d.]+)/.exec(ua) || 0)[1]);
1170
+ }
1171
+ // Detect IE 11.
1172
+ else if (name != 'IE' && layout == 'Trident' && (data = /\brv:([\d.]+)/.exec(ua))) {
1173
+ if (name) {
1174
+ description.push('identifying as ' + name + (version ? ' ' + version : ''));
1175
+ }
1176
+ name = 'IE';
1177
+ version = data[1];
1178
+ }
1179
+ // Leverage environment features.
1180
+ if (useFeatures) {
1181
+ // Detect server-side environments.
1182
+ // Rhino has a global function while others have a global object.
1183
+ if (isHostType(context, 'global')) {
1184
+ if (java) {
1185
+ data = java.lang.System;
1186
+ arch = data.getProperty('os.arch');
1187
+ os = os || data.getProperty('os.name') + ' ' + data.getProperty('os.version');
1188
+ }
1189
+ if (isModuleScope && isHostType(context, 'system') && (data = [context.system])[0]) {
1190
+ os || (os = data[0].os || null);
1191
+ try {
1192
+ data[1] = context.require('ringo/engine').version;
1193
+ version = data[1].join('.');
1194
+ name = 'RingoJS';
1195
+ } catch(e) {
1196
+ if (data[0].global.system == context.system) {
1197
+ name = 'Narwhal';
1198
+ }
1199
+ }
1200
+ }
1201
+ else if (
1202
+ typeof context.process == 'object' && !context.process.browser &&
1203
+ (data = context.process)
1204
+ ) {
1205
+ name = 'Node.js';
1206
+ arch = data.arch;
1207
+ os = data.platform;
1208
+ version = /[\d.]+/.exec(data.version)[0];
1209
+ }
1210
+ else if (rhino) {
1211
+ name = 'Rhino';
1212
+ }
1213
+ }
1214
+ // Detect Adobe AIR.
1215
+ else if (getClassOf((data = context.runtime)) == airRuntimeClass) {
1216
+ name = 'Adobe AIR';
1217
+ os = data.flash.system.Capabilities.os;
1218
+ }
1219
+ // Detect PhantomJS.
1220
+ else if (getClassOf((data = context.phantom)) == phantomClass) {
1221
+ name = 'PhantomJS';
1222
+ version = (data = data.version || null) && (data.major + '.' + data.minor + '.' + data.patch);
1223
+ }
1224
+ // Detect IE compatibility modes.
1225
+ else if (typeof doc.documentMode == 'number' && (data = /\bTrident\/(\d+)/i.exec(ua))) {
1226
+ // We're in compatibility mode when the Trident version + 4 doesn't
1227
+ // equal the document mode.
1228
+ version = [version, doc.documentMode];
1229
+ if ((data = +data[1] + 4) != version[1]) {
1230
+ description.push('IE ' + version[1] + ' mode');
1231
+ layout && (layout[1] = '');
1232
+ version[1] = data;
1233
+ }
1234
+ version = name == 'IE' ? String(version[1].toFixed(1)) : version[0];
1235
+ }
1236
+ os = os && format(os);
1237
+ }
1238
+ // Detect prerelease phases.
1239
+ if (version && (data =
1240
+ /(?:[ab]|dp|pre|[ab]\d+pre)(?:\d+\+?)?$/i.exec(version) ||
1241
+ /(?:alpha|beta)(?: ?\d)?/i.exec(ua + ';' + (useFeatures && nav.appMinorVersion)) ||
1242
+ /\bMinefield\b/i.test(ua) && 'a'
1243
+ )) {
1244
+ prerelease = /b/i.test(data) ? 'beta' : 'alpha';
1245
+ version = version.replace(RegExp(data + '\\+?$'), '') +
1246
+ (prerelease == 'beta' ? beta : alpha) + (/\d+\+?/.exec(data) || '');
1247
+ }
1248
+ // Detect Firefox Mobile.
1249
+ if (name == 'Fennec' || name == 'Firefox' && /\b(?:Android|Firefox OS)\b/.test(os)) {
1250
+ name = 'Firefox Mobile';
1251
+ }
1252
+ // Obscure Maxthon's unreliable version.
1253
+ else if (name == 'Maxthon' && version) {
1254
+ version = version.replace(/\.[\d.]+/, '.x');
1255
+ }
1256
+ // Detect Xbox 360 and Xbox One.
1257
+ else if (/\bXbox\b/i.test(product)) {
1258
+ os = null;
1259
+ if (product == 'Xbox 360' && /\bIEMobile\b/.test(ua)) {
1260
+ description.unshift('mobile mode');
1261
+ }
1262
+ }
1263
+ // Add mobile postfix.
1264
+ else if ((/^(?:Chrome|IE|Opera)$/.test(name) || name && !product && !/Browser|Mobi/.test(name)) &&
1265
+ (os == 'Windows CE' || /Mobi/i.test(ua))) {
1266
+ name += ' Mobile';
1267
+ }
1268
+ // Detect IE platform preview.
1269
+ else if (name == 'IE' && useFeatures && context.external === null) {
1270
+ description.unshift('platform preview');
1271
+ }
1272
+ // Detect BlackBerry OS version.
1273
+ // http://docs.blackberry.com/en/developers/deliverables/18169/HTTP_headers_sent_by_BB_Browser_1234911_11.jsp
1274
+ else if ((/\bBlackBerry\b/.test(product) || /\bBB10\b/.test(ua)) && (data =
1275
+ (RegExp(product.replace(/ +/g, ' *') + '/([.\\d]+)', 'i').exec(ua) || 0)[1] ||
1276
+ version
1277
+ )) {
1278
+ data = [data, /BB10/.test(ua)];
1279
+ os = (data[1] ? (product = null, manufacturer = 'BlackBerry') : 'Device Software') + ' ' + data[0];
1280
+ version = null;
1281
+ }
1282
+ // Detect Opera identifying/masking itself as another browser.
1283
+ // http://www.opera.com/support/kb/view/843/
1284
+ else if (this != forOwn && product != 'Wii' && (
1285
+ (useFeatures && opera) ||
1286
+ (/Opera/.test(name) && /\b(?:MSIE|Firefox)\b/i.test(ua)) ||
1287
+ (name == 'Firefox' && /\bOS X (?:\d+\.){2,}/.test(os)) ||
1288
+ (name == 'IE' && (
1289
+ (os && !/^Win/.test(os) && version > 5.5) ||
1290
+ /\bWindows XP\b/.test(os) && version > 8 ||
1291
+ version == 8 && !/\bTrident\b/.test(ua)
1292
+ ))
1293
+ ) && !reOpera.test((data = parse.call(forOwn, ua.replace(reOpera, '') + ';'))) && data.name) {
1294
+ // When "identifying", the UA contains both Opera and the other browser's name.
1295
+ data = 'ing as ' + data.name + ((data = data.version) ? ' ' + data : '');
1296
+ if (reOpera.test(name)) {
1297
+ if (/\bIE\b/.test(data) && os == 'Mac OS') {
1298
+ os = null;
1299
+ }
1300
+ data = 'identify' + data;
1301
+ }
1302
+ // When "masking", the UA contains only the other browser's name.
1303
+ else {
1304
+ data = 'mask' + data;
1305
+ if (operaClass) {
1306
+ name = format(operaClass.replace(/([a-z])([A-Z])/g, '$1 $2'));
1307
+ } else {
1308
+ name = 'Opera';
1309
+ }
1310
+ if (/\bIE\b/.test(data)) {
1311
+ os = null;
1312
+ }
1313
+ if (!useFeatures) {
1314
+ version = null;
1315
+ }
1316
+ }
1317
+ layout = ['Presto'];
1318
+ description.push(data);
1319
+ }
1320
+ // Detect WebKit Nightly and approximate Chrome/Safari versions.
1321
+ if ((data = (/\bAppleWebKit\/([\d.]+\+?)/i.exec(ua) || 0)[1])) {
1322
+ // Correct build number for numeric comparison.
1323
+ // (e.g. "532.5" becomes "532.05")
1324
+ data = [parseFloat(data.replace(/\.(\d)$/, '.0$1')), data];
1325
+ // Nightly builds are postfixed with a "+".
1326
+ if (name == 'Safari' && data[1].slice(-1) == '+') {
1327
+ name = 'WebKit Nightly';
1328
+ prerelease = 'alpha';
1329
+ version = data[1].slice(0, -1);
1330
+ }
1331
+ // Clear incorrect browser versions.
1332
+ else if (version == data[1] ||
1333
+ version == (data[2] = (/\bSafari\/([\d.]+\+?)/i.exec(ua) || 0)[1])) {
1334
+ version = null;
1335
+ }
1336
+ // Use the full Chrome version when available.
1337
+ data[1] = (/\bChrome\/([\d.]+)/i.exec(ua) || 0)[1];
1338
+ // Detect Blink layout engine.
1339
+ if (data[0] == 537.36 && data[2] == 537.36 && parseFloat(data[1]) >= 28 && layout == 'WebKit') {
1340
+ layout = ['Blink'];
1341
+ }
1342
+ // Detect JavaScriptCore.
1343
+ // http://stackoverflow.com/questions/6768474/how-can-i-detect-which-javascript-engine-v8-or-jsc-is-used-at-runtime-in-androi
1344
+ if (!useFeatures || (!likeChrome && !data[1])) {
1345
+ layout && (layout[1] = 'like Safari');
1346
+ data = (data = data[0], data < 400 ? 1 : data < 500 ? 2 : data < 526 ? 3 : data < 533 ? 4 : data < 534 ? '4+' : data < 535 ? 5 : data < 537 ? 6 : data < 538 ? 7 : data < 601 ? 8 : '8');
1347
+ } else {
1348
+ layout && (layout[1] = 'like Chrome');
1349
+ data = data[1] || (data = data[0], data < 530 ? 1 : data < 532 ? 2 : data < 532.05 ? 3 : data < 533 ? 4 : data < 534.03 ? 5 : data < 534.07 ? 6 : data < 534.10 ? 7 : data < 534.13 ? 8 : data < 534.16 ? 9 : data < 534.24 ? 10 : data < 534.30 ? 11 : data < 535.01 ? 12 : data < 535.02 ? '13+' : data < 535.07 ? 15 : data < 535.11 ? 16 : data < 535.19 ? 17 : data < 536.05 ? 18 : data < 536.10 ? 19 : data < 537.01 ? 20 : data < 537.11 ? '21+' : data < 537.13 ? 23 : data < 537.18 ? 24 : data < 537.24 ? 25 : data < 537.36 ? 26 : layout != 'Blink' ? '27' : '28');
1350
+ }
1351
+ // Add the postfix of ".x" or "+" for approximate versions.
1352
+ layout && (layout[1] += ' ' + (data += typeof data == 'number' ? '.x' : /[.+]/.test(data) ? '' : '+'));
1353
+ // Obscure version for some Safari 1-2 releases.
1354
+ if (name == 'Safari' && (!version || parseInt(version) > 45)) {
1355
+ version = data;
1356
+ }
1357
+ }
1358
+ // Detect Opera desktop modes.
1359
+ if (name == 'Opera' && (data = /\bzbov|zvav$/.exec(os))) {
1360
+ name += ' ';
1361
+ description.unshift('desktop mode');
1362
+ if (data == 'zvav') {
1363
+ name += 'Mini';
1364
+ version = null;
1365
+ } else {
1366
+ name += 'Mobile';
1367
+ }
1368
+ os = os.replace(RegExp(' *' + data + '$'), '');
1369
+ }
1370
+ // Detect Chrome desktop mode.
1371
+ else if (name == 'Safari' && /\bChrome\b/.exec(layout && layout[1])) {
1372
+ description.unshift('desktop mode');
1373
+ name = 'Chrome Mobile';
1374
+ version = null;
1375
+
1376
+ if (/\bOS X\b/.test(os)) {
1377
+ manufacturer = 'Apple';
1378
+ os = 'iOS 4.3+';
1379
+ } else {
1380
+ os = null;
1381
+ }
1382
+ }
1383
+ // Strip incorrect OS versions.
1384
+ if (version && version.indexOf((data = /[\d.]+$/.exec(os))) == 0 &&
1385
+ ua.indexOf('/' + data + '-') > -1) {
1386
+ os = trim(os.replace(data, ''));
1387
+ }
1388
+ // Add layout engine.
1389
+ if (layout && !/\b(?:Avant|Nook)\b/.test(name) && (
1390
+ /Browser|Lunascape|Maxthon/.test(name) ||
1391
+ name != 'Safari' && /^iOS/.test(os) && /\bSafari\b/.test(layout[1]) ||
1392
+ /^(?:Adobe|Arora|Breach|Midori|Opera|Phantom|Rekonq|Rock|Sleipnir|Web)/.test(name) && layout[1])) {
1393
+ // Don't add layout details to description if they are falsey.
1394
+ (data = layout[layout.length - 1]) && description.push(data);
1395
+ }
1396
+ // Combine contextual information.
1397
+ if (description.length) {
1398
+ description = ['(' + description.join('; ') + ')'];
1399
+ }
1400
+ // Append manufacturer to description.
1401
+ if (manufacturer && product && product.indexOf(manufacturer) < 0) {
1402
+ description.push('on ' + manufacturer);
1403
+ }
1404
+ // Append product to description.
1405
+ if (product) {
1406
+ description.push((/^on /.test(description[description.length - 1]) ? '' : 'on ') + product);
1407
+ }
1408
+ // Parse the OS into an object.
1409
+ if (os) {
1410
+ data = / ([\d.+]+)$/.exec(os);
1411
+ isSpecialCasedOS = data && os.charAt(os.length - data[0].length - 1) == '/';
1412
+ os = {
1413
+ 'architecture': 32,
1414
+ 'family': (data && !isSpecialCasedOS) ? os.replace(data[0], '') : os,
1415
+ 'version': data ? data[1] : null,
1416
+ 'toString': function() {
1417
+ var version = this.version;
1418
+ return this.family + ((version && !isSpecialCasedOS) ? ' ' + version : '') + (this.architecture == 64 ? ' 64-bit' : '');
1419
+ }
1420
+ };
1421
+ }
1422
+ // Add browser/OS architecture.
1423
+ if ((data = /\b(?:AMD|IA|Win|WOW|x86_|x)64\b/i.exec(arch)) && !/\bi686\b/i.test(arch)) {
1424
+ if (os) {
1425
+ os.architecture = 64;
1426
+ os.family = os.family.replace(RegExp(' *' + data), '');
1427
+ }
1428
+ if (
1429
+ name && (/\bWOW64\b/i.test(ua) ||
1430
+ (useFeatures && /\w(?:86|32)$/.test(nav.cpuClass || nav.platform) && !/\bWin64; x64\b/i.test(ua)))
1431
+ ) {
1432
+ description.unshift('32-bit');
1433
+ }
1434
+ }
1435
+ // Chrome 39 and above on OS X is always 64-bit.
1436
+ else if (
1437
+ os && /^OS X/.test(os.family) &&
1438
+ name == 'Chrome' && parseFloat(version) >= 39
1439
+ ) {
1440
+ os.architecture = 64;
1441
+ }
1442
+
1443
+ ua || (ua = null);
1444
+
1445
+ /*------------------------------------------------------------------------*/
1446
+
1447
+ /**
1448
+ * The platform object.
1449
+ *
1450
+ * @name platform
1451
+ * @type Object
1452
+ */
1453
+ var platform = {};
1454
+
1455
+ /**
1456
+ * The platform description.
1457
+ *
1458
+ * @memberOf platform
1459
+ * @type string|null
1460
+ */
1461
+ platform.description = ua;
1462
+
1463
+ /**
1464
+ * The name of the browser's layout engine.
1465
+ *
1466
+ * @memberOf platform
1467
+ * @type string|null
1468
+ */
1469
+ platform.layout = layout && layout[0];
1470
+
1471
+ /**
1472
+ * The name of the product's manufacturer.
1473
+ *
1474
+ * @memberOf platform
1475
+ * @type string|null
1476
+ */
1477
+ platform.manufacturer = manufacturer;
1478
+
1479
+ /**
1480
+ * The name of the browser/environment.
1481
+ *
1482
+ * @memberOf platform
1483
+ * @type string|null
1484
+ */
1485
+ platform.name = name;
1486
+
1487
+ /**
1488
+ * The alpha/beta release indicator.
1489
+ *
1490
+ * @memberOf platform
1491
+ * @type string|null
1492
+ */
1493
+ platform.prerelease = prerelease;
1494
+
1495
+ /**
1496
+ * The name of the product hosting the browser.
1497
+ *
1498
+ * @memberOf platform
1499
+ * @type string|null
1500
+ */
1501
+ platform.product = product;
1502
+
1503
+ /**
1504
+ * The browser's user agent string.
1505
+ *
1506
+ * @memberOf platform
1507
+ * @type string|null
1508
+ */
1509
+ platform.ua = ua;
1510
+
1511
+ /**
1512
+ * The browser/environment version.
1513
+ *
1514
+ * @memberOf platform
1515
+ * @type string|null
1516
+ */
1517
+ platform.version = name && version;
1518
+
1519
+ /**
1520
+ * The name of the operating system.
1521
+ *
1522
+ * @memberOf platform
1523
+ * @type Object
1524
+ */
1525
+ platform.os = os || {
1526
+
1527
+ /**
1528
+ * The CPU architecture the OS is built for.
1529
+ *
1530
+ * @memberOf platform.os
1531
+ * @type number|null
1532
+ */
1533
+ 'architecture': null,
1534
+
1535
+ /**
1536
+ * The family of the OS.
1537
+ *
1538
+ * Common values include:
1539
+ * "Windows", "Windows Server 2008 R2 / 7", "Windows Server 2008 / Vista",
1540
+ * "Windows XP", "OS X", "Ubuntu", "Debian", "Fedora", "Red Hat", "SuSE",
1541
+ * "Android", "iOS" and "Windows Phone"
1542
+ *
1543
+ * @memberOf platform.os
1544
+ * @type string|null
1545
+ */
1546
+ 'family': null,
1547
+
1548
+ /**
1549
+ * The version of the OS.
1550
+ *
1551
+ * @memberOf platform.os
1552
+ * @type string|null
1553
+ */
1554
+ 'version': null,
1555
+
1556
+ /**
1557
+ * Returns the OS string.
1558
+ *
1559
+ * @memberOf platform.os
1560
+ * @returns {string} The OS string.
1561
+ */
1562
+ 'toString': function() { return 'null'; }
1563
+ };
1564
+
1565
+ platform.parse = parse;
1566
+ platform.toString = toStringPlatform;
1567
+
1568
+ if (platform.version) {
1569
+ description.unshift(version);
1570
+ }
1571
+ if (platform.name) {
1572
+ description.unshift(name);
1573
+ }
1574
+ if (os && name && !(os == String(os).split(' ')[0] && (os == name.split(' ')[0] || product))) {
1575
+ description.push(product ? '(' + os + ')' : 'on ' + os);
1576
+ }
1577
+ if (description.length) {
1578
+ platform.description = description.join(' ');
1579
+ }
1580
+ return platform;
1581
+ }
1582
+
1583
+ /*--------------------------------------------------------------------------*/
1584
+
1585
+ // Export platform.
1586
+ var platform = parse();
1587
+
1588
+ // Some AMD build optimizers, like r.js, check for condition patterns like the following:
1589
+ if (freeExports && freeModule) {
1590
+ // Export for CommonJS support.
1591
+ forOwn(platform, function(value, key) {
1592
+ freeExports[key] = value;
1593
+ });
1594
+ }
1595
+ else {
1596
+ // Export to the global object.
1597
+ root.platform = platform;
1598
+ }
1599
+ }.call(commonjsGlobal));
1600
+ }(platform, platform.exports));
1601
+
1602
+ (function (module, exports) {
1603
+
1604
+ Object.defineProperty(exports, "__esModule", {
1605
+ value: true
1606
+ });
1607
+
1608
+ var _platform2 = platform.exports;
1609
+
1610
+ var _platform3 = _interopRequireDefault(_platform2);
1611
+
1612
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1613
+
1614
+ // deep clone of original platform
1615
+ var platform$1 = JSON.parse(JSON.stringify(_platform3.default));
1616
+
1617
+ // operating system
1618
+
1619
+ // sugar for https://github.com/bestiejs/platform.js
1620
+ // make sure to ALWAYS reference the layout engine,
1621
+ // even if it is not necessary for the condition,
1622
+ // as this makes grepping for this stuff simpler
1623
+
1624
+ var os = platform$1.os.family || '';
1625
+ var ANDROID = os === 'Android';
1626
+ var WINDOWS = os.slice(0, 7) === 'Windows';
1627
+ var OSX = os === 'OS X';
1628
+ var IOS = os === 'iOS';
1629
+
1630
+ // layout
1631
+ var BLINK = platform$1.layout === 'Blink';
1632
+ var GECKO = platform$1.layout === 'Gecko';
1633
+ var TRIDENT = platform$1.layout === 'Trident';
1634
+ var EDGE = platform$1.layout === 'EdgeHTML';
1635
+ var WEBKIT = platform$1.layout === 'WebKit';
1636
+
1637
+ // browser version (not layout engine version!)
1638
+ var version = parseFloat(platform$1.version);
1639
+ var majorVersion = Math.floor(version);
1640
+ platform$1.majorVersion = majorVersion;
1641
+
1642
+ platform$1.is = {
1643
+ // operating system
1644
+ ANDROID: ANDROID,
1645
+ WINDOWS: WINDOWS,
1646
+ OSX: OSX,
1647
+ IOS: IOS,
1648
+ // layout
1649
+ BLINK: BLINK, // "Chrome", "Chrome Mobile", "Opera"
1650
+ GECKO: GECKO, // "Firefox"
1651
+ TRIDENT: TRIDENT, // "Internet Explorer"
1652
+ EDGE: EDGE, // "Microsoft Edge"
1653
+ WEBKIT: WEBKIT, // "Safari"
1654
+ // INTERNET EXPLORERS
1655
+ IE9: TRIDENT && majorVersion === 9,
1656
+ IE10: TRIDENT && majorVersion === 10,
1657
+ IE11: TRIDENT && majorVersion === 11
1658
+ };
1659
+
1660
+ exports.default = platform$1;
1661
+ module.exports = exports['default'];
1662
+
1663
+ }(platform$1, platform$1.exports));
1664
+
1665
+ (function (module, exports) {
1666
+
1667
+ Object.defineProperty(exports, "__esModule", {
1668
+ value: true
1669
+ });
1670
+
1671
+ exports.default = function (tests) {
1672
+ var data = before();
1673
+
1674
+ var results = {};
1675
+ Object.keys(tests).map(function (key) {
1676
+ results[key] = test(data, tests[key]);
1677
+ });
1678
+
1679
+ after(data);
1680
+ return results;
1681
+ };
1682
+
1683
+ var _platform = platform$1.exports;
1684
+
1685
+ var _platform2 = _interopRequireDefault(_platform);
1686
+
1687
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1688
+
1689
+ function before() {
1690
+ var data = {
1691
+ // remember what had focus to restore after test
1692
+ activeElement: document.activeElement,
1693
+ // remember scroll positions to restore after test
1694
+ windowScrollTop: window.scrollTop,
1695
+ windowScrollLeft: window.scrollLeft,
1696
+ bodyScrollTop: document.body.scrollTop,
1697
+ bodyScrollLeft: document.body.scrollLeft
1698
+ };
1699
+
1700
+ // wrap tests in an element hidden from screen readers to prevent them
1701
+ // from announcing focus, which can be quite irritating to the user
1702
+ var iframe = document.createElement('iframe');
1703
+ iframe.setAttribute('style', 'position:absolute; position:fixed; top:0; left:-2px; width:1px; height:1px; overflow:hidden;');
1704
+ iframe.setAttribute('aria-live', 'off');
1705
+ iframe.setAttribute('aria-busy', 'true');
1706
+ iframe.setAttribute('aria-hidden', 'true');
1707
+ document.body.appendChild(iframe);
1708
+
1709
+ var _window = iframe.contentWindow;
1710
+ var _document = _window.document;
1711
+
1712
+ _document.open();
1713
+ _document.close();
1714
+ var wrapper = _document.createElement('div');
1715
+ _document.body.appendChild(wrapper);
1716
+
1717
+ data.iframe = iframe;
1718
+ data.wrapper = wrapper;
1719
+ data.window = _window;
1720
+ data.document = _document;
1721
+
1722
+ return data;
1723
+ }
1724
+
1725
+ // options.element:
1726
+ // {string} element name
1727
+ // {function} callback(wrapper, document) to generate an element
1728
+ // options.mutate: (optional)
1729
+ // {function} callback(element, wrapper, document) to manipulate element prior to focus-test.
1730
+ // Can return DOMElement to define focus target (default: element)
1731
+ // options.validate: (optional)
1732
+ // {function} callback(element, focusTarget, document) to manipulate test-result
1733
+ function test(data, options) {
1734
+ // make sure we operate on a clean slate
1735
+ data.wrapper.innerHTML = '';
1736
+ // create dummy element to test focusability of
1737
+ var element = typeof options.element === 'string' ? data.document.createElement(options.element) : options.element(data.wrapper, data.document);
1738
+ // allow callback to further specify dummy element
1739
+ // and optionally define element to focus
1740
+ var focus = options.mutate && options.mutate(element, data.wrapper, data.document);
1741
+ if (!focus && focus !== false) {
1742
+ focus = element;
1743
+ }
1744
+ // element needs to be part of the DOM to be focusable
1745
+ !element.parentNode && data.wrapper.appendChild(element);
1746
+ // test if the element with invalid tabindex can be focused
1747
+ focus && focus.focus && focus.focus();
1748
+ // validate test's result
1749
+ return options.validate ? options.validate(element, focus, data.document) : data.document.activeElement === focus;
1750
+ }
1751
+
1752
+ function after(data) {
1753
+ // restore focus to what it was before test and cleanup
1754
+ if (data.activeElement === document.body) {
1755
+ document.activeElement && document.activeElement.blur && document.activeElement.blur();
1756
+ if (_platform2.default.is.IE10) {
1757
+ // IE10 does not redirect focus to <body> when the activeElement is removed
1758
+ document.body.focus();
1759
+ }
1760
+ } else {
1761
+ data.activeElement && data.activeElement.focus && data.activeElement.focus();
1762
+ }
1763
+
1764
+ document.body.removeChild(data.iframe);
1765
+
1766
+ // restore scroll position
1767
+ window.scrollTop = data.windowScrollTop;
1768
+ window.scrollLeft = data.windowScrollLeft;
1769
+ document.body.scrollTop = data.bodyScrollTop;
1770
+ document.body.scrollLeft = data.bodyScrollLeft;
1771
+ }
1772
+
1773
+ module.exports = exports['default'];
1774
+
1775
+ }(detectFocus, detectFocus.exports));
1776
+
1777
+ var supportsCache = {exports: {}};
1778
+
1779
+ var version = {exports: {}};
1780
+
1781
+ (function (module, exports) {
1782
+
1783
+ Object.defineProperty(exports, "__esModule", {
1784
+ value: true
1785
+ });
1786
+
1787
+ // this file is overwritten by `npm run build:pre`
1788
+ var version = '1.4.1';
1789
+ exports.default = version;
1790
+ module.exports = exports['default'];
1791
+
1792
+ }(version, version.exports));
1793
+
1794
+ (function (module, exports) {
1795
+
1796
+ Object.defineProperty(exports, "__esModule", {
1797
+ value: true
1798
+ });
1799
+
1800
+ var _version = version.exports;
1801
+
1802
+ var _version2 = _interopRequireDefault(_version);
1803
+
1804
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1805
+
1806
+ function readLocalStorage(key) {
1807
+ // allow reading from storage to retrieve previous support results
1808
+ // even while the document does not have focus
1809
+ var data = void 0;
1810
+
1811
+ try {
1812
+ data = window.localStorage && window.localStorage.getItem(key);
1813
+ data = data ? JSON.parse(data) : {};
1814
+ } catch (e) {
1815
+ data = {};
1816
+ }
1817
+
1818
+ return data;
1819
+ } /*
1820
+ Facility to cache test results in localStorage.
1821
+
1822
+ USAGE:
1823
+ cache.get('key');
1824
+ cache.set('key', 'value');
1825
+ */
1826
+
1827
+ function writeLocalStorage(key, value) {
1828
+ if (!document.hasFocus()) {
1829
+ // if the document does not have focus when tests are executed, focus() may
1830
+ // not be handled properly and events may not be dispatched immediately.
1831
+ // This can happen when a document is reloaded while Developer Tools have focus.
1832
+ try {
1833
+ window.localStorage && window.localStorage.removeItem(key);
1834
+ } catch (e) {
1835
+ // ignore
1836
+ }
1837
+
1838
+ return;
1839
+ }
1840
+
1841
+ try {
1842
+ window.localStorage && window.localStorage.setItem(key, JSON.stringify(value));
1843
+ } catch (e) {
1844
+ // ignore
1845
+ }
1846
+ }
1847
+
1848
+ var userAgent = typeof window !== 'undefined' && window.navigator.userAgent || '';
1849
+ var cacheKey = 'ally-supports-cache';
1850
+ var cache = readLocalStorage(cacheKey);
1851
+
1852
+ // update the cache if ally or the user agent changed (newer version, etc)
1853
+ if (cache.userAgent !== userAgent || cache.version !== _version2.default) {
1854
+ cache = {};
1855
+ }
1856
+
1857
+ cache.userAgent = userAgent;
1858
+ cache.version = _version2.default;
1859
+
1860
+ exports.default = {
1861
+ get: function get() {
1862
+ return cache;
1863
+ },
1864
+ set: function set(values) {
1865
+ Object.keys(values).forEach(function (key) {
1866
+ cache[key] = values[key];
1867
+ });
1868
+
1869
+ cache.time = new Date().toISOString();
1870
+ writeLocalStorage(cacheKey, cache);
1871
+ }
1872
+ };
1873
+ module.exports = exports['default'];
1874
+
1875
+ }(supportsCache, supportsCache.exports));
1876
+
1877
+ var cssShadowPiercingDeepCombinator = {exports: {}};
1878
+
1879
+ (function (module, exports) {
1880
+
1881
+ Object.defineProperty(exports, "__esModule", {
1882
+ value: true
1883
+ });
1884
+
1885
+ exports.default = function () {
1886
+ var combinator = void 0;
1887
+
1888
+ // see https://dev.w3.org/csswg/css-scoping-1/#deep-combinator
1889
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1117572
1890
+ // https://code.google.com/p/chromium/issues/detail?id=446051
1891
+ try {
1892
+ document.querySelector('html >>> :first-child');
1893
+ combinator = '>>>';
1894
+ } catch (noArrowArrowArrow) {
1895
+ try {
1896
+ // old syntax supported at least up to Chrome 41
1897
+ // https://code.google.com/p/chromium/issues/detail?id=446051
1898
+ document.querySelector('html /deep/ :first-child');
1899
+ combinator = '/deep/';
1900
+ } catch (noDeep) {
1901
+ combinator = '';
1902
+ }
1903
+ }
1904
+
1905
+ return combinator;
1906
+ };
1907
+
1908
+ module.exports = exports['default'];
1909
+
1910
+ }(cssShadowPiercingDeepCombinator, cssShadowPiercingDeepCombinator.exports));
1911
+
1912
+ var focusAreaImgTabindex = {exports: {}};
1913
+
1914
+ var gif = {exports: {}};
1915
+
1916
+ (function (module, exports) {
1917
+
1918
+ Object.defineProperty(exports, "__esModule", {
1919
+ value: true
1920
+ });
1921
+ exports.default = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
1922
+ module.exports = exports['default'];
1923
+
1924
+ }(gif, gif.exports));
1925
+
1926
+ (function (module, exports) {
1927
+
1928
+ Object.defineProperty(exports, "__esModule", {
1929
+ value: true
1930
+ });
1931
+
1932
+ var _gif = gif.exports;
1933
+
1934
+ var _gif2 = _interopRequireDefault(_gif);
1935
+
1936
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1937
+
1938
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-usemap
1939
+ exports.default = {
1940
+ element: 'div',
1941
+ mutate: function mutate(element) {
1942
+ element.innerHTML = '<map name="image-map-tabindex-test">' + '<area shape="rect" coords="63,19,144,45"></map>' + '<img usemap="#image-map-tabindex-test" tabindex="-1" alt="" src="' + _gif2.default + '">';
1943
+
1944
+ return element.querySelector('area');
1945
+ }
1946
+ };
1947
+ module.exports = exports['default'];
1948
+
1949
+ }(focusAreaImgTabindex, focusAreaImgTabindex.exports));
1950
+
1951
+ var focusAreaTabindex = {exports: {}};
1952
+
1953
+ (function (module, exports) {
1954
+
1955
+ Object.defineProperty(exports, "__esModule", {
1956
+ value: true
1957
+ });
1958
+
1959
+ var _gif = gif.exports;
1960
+
1961
+ var _gif2 = _interopRequireDefault(_gif);
1962
+
1963
+ var _platform = platform$1.exports;
1964
+
1965
+ var _platform2 = _interopRequireDefault(_platform);
1966
+
1967
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1968
+
1969
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-usemap
1970
+ exports.default = {
1971
+ element: 'div',
1972
+ mutate: function mutate(element) {
1973
+ element.innerHTML = '<map name="image-map-tabindex-test">' + '<area href="#void" tabindex="-1" shape="rect" coords="63,19,144,45"></map>' + '<img usemap="#image-map-tabindex-test" alt="" src="' + _gif2.default + '">';
1974
+
1975
+ return false;
1976
+ },
1977
+ validate: function validate(element, focusTarget, _document) {
1978
+ if (_platform2.default.is.GECKO) {
1979
+ // fixes https://github.com/medialize/ally.js/issues/35
1980
+ // Firefox loads the DataURI asynchronously, causing a false-negative
1981
+ return true;
1982
+ }
1983
+
1984
+ var focus = element.querySelector('area');
1985
+ focus.focus();
1986
+ return _document.activeElement === focus;
1987
+ }
1988
+ };
1989
+ module.exports = exports['default'];
1990
+
1991
+ }(focusAreaTabindex, focusAreaTabindex.exports));
1992
+
1993
+ var focusAreaWithoutHref = {exports: {}};
1994
+
1995
+ (function (module, exports) {
1996
+
1997
+ Object.defineProperty(exports, "__esModule", {
1998
+ value: true
1999
+ });
2000
+
2001
+ var _gif = gif.exports;
2002
+
2003
+ var _gif2 = _interopRequireDefault(_gif);
2004
+
2005
+ var _platform = platform$1.exports;
2006
+
2007
+ var _platform2 = _interopRequireDefault(_platform);
2008
+
2009
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2010
+
2011
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-usemap
2012
+ exports.default = {
2013
+ element: 'div',
2014
+ mutate: function mutate(element) {
2015
+ element.innerHTML = '<map name="image-map-area-href-test">' + '<area shape="rect" coords="63,19,144,45"></map>' + '<img usemap="#image-map-area-href-test" alt="" src="' + _gif2.default + '">';
2016
+
2017
+ return element.querySelector('area');
2018
+ },
2019
+ validate: function validate(element, focusTarget, _document) {
2020
+ if (_platform2.default.is.GECKO) {
2021
+ // fixes https://github.com/medialize/ally.js/issues/35
2022
+ // Firefox loads the DataURI asynchronously, causing a false-negative
2023
+ return true;
2024
+ }
2025
+
2026
+ return _document.activeElement === focusTarget;
2027
+ }
2028
+ };
2029
+ module.exports = exports['default'];
2030
+
2031
+ }(focusAreaWithoutHref, focusAreaWithoutHref.exports));
2032
+
2033
+ var focusAudioWithoutControls = {exports: {}};
2034
+
2035
+ var mp3 = {exports: {}};
2036
+
2037
+ (function (module, exports) {
2038
+
2039
+ Object.defineProperty(exports, "__esModule", {
2040
+ value: true
2041
+ });
2042
+
2043
+ var _gif = gif.exports;
2044
+
2045
+ var _gif2 = _interopRequireDefault(_gif);
2046
+
2047
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2048
+
2049
+ exports.default = _gif2.default;
2050
+ // export default 'data:audio/mp3;base64,audio-focus-test';
2051
+
2052
+ module.exports = exports['default'];
2053
+
2054
+ }(mp3, mp3.exports));
2055
+
2056
+ (function (module, exports) {
2057
+
2058
+ Object.defineProperty(exports, "__esModule", {
2059
+ value: true
2060
+ });
2061
+
2062
+ var _mp = mp3.exports;
2063
+
2064
+ var _mp2 = _interopRequireDefault(_mp);
2065
+
2066
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2067
+
2068
+ exports.default = {
2069
+ name: 'can-focus-audio-without-controls',
2070
+ element: 'audio',
2071
+ mutate: function mutate(element) {
2072
+ try {
2073
+ // invalid media file can trigger warning in console, data-uri to prevent HTTP request
2074
+ element.setAttribute('src', _mp2.default);
2075
+ } catch (e) {
2076
+ // IE9 may throw "Error: Not implemented"
2077
+ }
2078
+ }
2079
+ };
2080
+ module.exports = exports['default'];
2081
+
2082
+ }(focusAudioWithoutControls, focusAudioWithoutControls.exports));
2083
+
2084
+ var focusBrokenImageMap = {exports: {}};
2085
+
2086
+ var gif_invalid = {exports: {}};
2087
+
2088
+ (function (module, exports) {
2089
+
2090
+ Object.defineProperty(exports, "__esModule", {
2091
+ value: true
2092
+ });
2093
+ exports.default = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ';
2094
+ module.exports = exports['default'];
2095
+
2096
+ }(gif_invalid, gif_invalid.exports));
2097
+
2098
+ (function (module, exports) {
2099
+
2100
+ Object.defineProperty(exports, "__esModule", {
2101
+ value: true
2102
+ });
2103
+
2104
+ var _gif = gif_invalid.exports;
2105
+
2106
+ var _gif2 = _interopRequireDefault(_gif);
2107
+
2108
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2109
+
2110
+ // NOTE: https://github.com/medialize/ally.js/issues/35
2111
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-usemap
2112
+ exports.default = {
2113
+ element: 'div',
2114
+ mutate: function mutate(element) {
2115
+ element.innerHTML = '<map name="broken-image-map-test"><area href="#void" shape="rect" coords="63,19,144,45"></map>' + '<img usemap="#broken-image-map-test" alt="" src="' + _gif2.default + '">';
2116
+
2117
+ return element.querySelector('area');
2118
+ }
2119
+ };
2120
+ module.exports = exports['default'];
2121
+
2122
+ }(focusBrokenImageMap, focusBrokenImageMap.exports));
2123
+
2124
+ var focusChildrenOfFocusableFlexbox = {exports: {}};
2125
+
2126
+ (function (module, exports) {
2127
+
2128
+ Object.defineProperty(exports, "__esModule", {
2129
+ value: true
2130
+ });
2131
+
2132
+ // Children of focusable elements with display:flex are focusable in IE10-11
2133
+ exports.default = {
2134
+ element: 'div',
2135
+ mutate: function mutate(element) {
2136
+ element.setAttribute('tabindex', '-1');
2137
+ element.setAttribute('style', 'display: -webkit-flex; display: -ms-flexbox; display: flex;');
2138
+ element.innerHTML = '<span style="display: block;">hello</span>';
2139
+ return element.querySelector('span');
2140
+ }
2141
+ };
2142
+ module.exports = exports['default'];
2143
+
2144
+ }(focusChildrenOfFocusableFlexbox, focusChildrenOfFocusableFlexbox.exports));
2145
+
2146
+ var focusFieldsetDisabled = {exports: {}};
2147
+
2148
+ (function (module, exports) {
2149
+
2150
+ Object.defineProperty(exports, "__esModule", {
2151
+ value: true
2152
+ });
2153
+
2154
+ // fieldset[tabindex=0][disabled] should not be focusable, but Blink and WebKit disagree
2155
+ // @specification https://www.w3.org/TR/html5/disabled-elements.html#concept-element-disabled
2156
+ // @browser-issue Chromium https://crbug.com/453847
2157
+ // @browser-issue WebKit https://bugs.webkit.org/show_bug.cgi?id=141086
2158
+ exports.default = {
2159
+ element: 'fieldset',
2160
+ mutate: function mutate(element) {
2161
+ element.setAttribute('tabindex', 0);
2162
+ element.setAttribute('disabled', 'disabled');
2163
+ }
2164
+ };
2165
+ module.exports = exports['default'];
2166
+
2167
+ }(focusFieldsetDisabled, focusFieldsetDisabled.exports));
2168
+
2169
+ var focusFieldset = {exports: {}};
2170
+
2171
+ (function (module, exports) {
2172
+
2173
+ Object.defineProperty(exports, "__esModule", {
2174
+ value: true
2175
+ });
2176
+ exports.default = {
2177
+ element: 'fieldset',
2178
+ mutate: function mutate(element) {
2179
+ element.innerHTML = '<legend>legend</legend><p>content</p>';
2180
+ }
2181
+ };
2182
+ module.exports = exports['default'];
2183
+
2184
+ }(focusFieldset, focusFieldset.exports));
2185
+
2186
+ var focusFlexboxContainer = {exports: {}};
2187
+
2188
+ (function (module, exports) {
2189
+
2190
+ Object.defineProperty(exports, "__esModule", {
2191
+ value: true
2192
+ });
2193
+
2194
+ // elements with display:flex are focusable in IE10-11
2195
+ exports.default = {
2196
+ element: 'span',
2197
+ mutate: function mutate(element) {
2198
+ element.setAttribute('style', 'display: -webkit-flex; display: -ms-flexbox; display: flex;');
2199
+ element.innerHTML = '<span style="display: block;">hello</span>';
2200
+ }
2201
+ };
2202
+ module.exports = exports['default'];
2203
+
2204
+ }(focusFlexboxContainer, focusFlexboxContainer.exports));
2205
+
2206
+ var focusFormDisabled = {exports: {}};
2207
+
2208
+ (function (module, exports) {
2209
+
2210
+ Object.defineProperty(exports, "__esModule", {
2211
+ value: true
2212
+ });
2213
+
2214
+ // form[tabindex=0][disabled] should be focusable as the
2215
+ // specification doesn't know the disabled attribute on the form element
2216
+ // @specification https://www.w3.org/TR/html5/forms.html#the-form-element
2217
+ exports.default = {
2218
+ element: 'form',
2219
+ mutate: function mutate(element) {
2220
+ element.setAttribute('tabindex', 0);
2221
+ element.setAttribute('disabled', 'disabled');
2222
+ }
2223
+ };
2224
+ module.exports = exports['default'];
2225
+
2226
+ }(focusFormDisabled, focusFormDisabled.exports));
2227
+
2228
+ var focusImgIsmap = {exports: {}};
2229
+
2230
+ (function (module, exports) {
2231
+
2232
+ Object.defineProperty(exports, "__esModule", {
2233
+ value: true
2234
+ });
2235
+
2236
+ var _gif = gif.exports;
2237
+
2238
+ var _gif2 = _interopRequireDefault(_gif);
2239
+
2240
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2241
+
2242
+ // NOTE: https://github.com/medialize/ally.js/issues/35
2243
+ // fixes https://github.com/medialize/ally.js/issues/20
2244
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-ismap
2245
+ exports.default = {
2246
+ element: 'a',
2247
+ mutate: function mutate(element) {
2248
+ element.href = '#void';
2249
+ element.innerHTML = '<img ismap src="' + _gif2.default + '" alt="">';
2250
+ return element.querySelector('img');
2251
+ }
2252
+ };
2253
+ module.exports = exports['default'];
2254
+
2255
+ }(focusImgIsmap, focusImgIsmap.exports));
2256
+
2257
+ var focusImgUsemapTabindex = {exports: {}};
2258
+
2259
+ (function (module, exports) {
2260
+
2261
+ Object.defineProperty(exports, "__esModule", {
2262
+ value: true
2263
+ });
2264
+
2265
+ var _gif = gif.exports;
2266
+
2267
+ var _gif2 = _interopRequireDefault(_gif);
2268
+
2269
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2270
+
2271
+ // NOTE: https://github.com/medialize/ally.js/issues/35
2272
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-usemap
2273
+ exports.default = {
2274
+ element: 'div',
2275
+ mutate: function mutate(element) {
2276
+ element.innerHTML = '<map name="image-map-tabindex-test"><area href="#void" shape="rect" coords="63,19,144,45"></map>' + '<img usemap="#image-map-tabindex-test" tabindex="-1" alt="" ' + 'src="' + _gif2.default + '">';
2277
+
2278
+ return element.querySelector('img');
2279
+ }
2280
+ };
2281
+ module.exports = exports['default'];
2282
+
2283
+ }(focusImgUsemapTabindex, focusImgUsemapTabindex.exports));
2284
+
2285
+ var focusInHiddenIframe = {exports: {}};
2286
+
2287
+ (function (module, exports) {
2288
+
2289
+ Object.defineProperty(exports, "__esModule", {
2290
+ value: true
2291
+ });
2292
+ exports.default = {
2293
+ element: function element(wrapper, _document) {
2294
+ var iframe = _document.createElement('iframe');
2295
+
2296
+ // iframe must be part of the DOM before accessing the contentWindow is possible
2297
+ wrapper.appendChild(iframe);
2298
+
2299
+ // create the iframe's default document (<html><head></head><body></body></html>)
2300
+ var iframeDocument = iframe.contentWindow.document;
2301
+ iframeDocument.open();
2302
+ iframeDocument.close();
2303
+ return iframe;
2304
+ },
2305
+ mutate: function mutate(iframe) {
2306
+ iframe.style.visibility = 'hidden';
2307
+
2308
+ var iframeDocument = iframe.contentWindow.document;
2309
+ var input = iframeDocument.createElement('input');
2310
+ iframeDocument.body.appendChild(input);
2311
+ return input;
2312
+ },
2313
+ validate: function validate(iframe) {
2314
+ var iframeDocument = iframe.contentWindow.document;
2315
+ var focus = iframeDocument.querySelector('input');
2316
+ return iframeDocument.activeElement === focus;
2317
+ }
2318
+ };
2319
+ module.exports = exports['default'];
2320
+
2321
+ }(focusInHiddenIframe, focusInHiddenIframe.exports));
2322
+
2323
+ var focusInZeroDimensionObject = {exports: {}};
2324
+
2325
+ (function (module, exports) {
2326
+
2327
+ Object.defineProperty(exports, "__esModule", {
2328
+ value: true
2329
+ });
2330
+
2331
+ exports.default = function () {
2332
+ return result;
2333
+ };
2334
+
2335
+ var _platform = platform$1.exports;
2336
+
2337
+ var _platform2 = _interopRequireDefault(_platform);
2338
+
2339
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2340
+
2341
+ var result = !_platform2.default.is.WEBKIT;
2342
+
2343
+ module.exports = exports['default'];
2344
+
2345
+ }(focusInZeroDimensionObject, focusInZeroDimensionObject.exports));
2346
+
2347
+ var focusInvalidTabindex = {exports: {}};
2348
+
2349
+ (function (module, exports) {
2350
+
2351
+ Object.defineProperty(exports, "__esModule", {
2352
+ value: true
2353
+ });
2354
+
2355
+ // Firefox allows *any* value and treats invalid values like tabindex="-1"
2356
+ // @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054
2357
+ exports.default = {
2358
+ element: 'div',
2359
+ mutate: function mutate(element) {
2360
+ element.setAttribute('tabindex', 'invalid-value');
2361
+ }
2362
+ };
2363
+ module.exports = exports['default'];
2364
+
2365
+ }(focusInvalidTabindex, focusInvalidTabindex.exports));
2366
+
2367
+ var focusLabelTabindex = {exports: {}};
2368
+
2369
+ (function (module, exports) {
2370
+
2371
+ Object.defineProperty(exports, "__esModule", {
2372
+ value: true
2373
+ });
2374
+ exports.default = {
2375
+ element: 'label',
2376
+ mutate: function mutate(element) {
2377
+ element.setAttribute('tabindex', '-1');
2378
+ },
2379
+ validate: function validate(element, focusTarget, _document) {
2380
+ /* eslint-enable no-unused-vars */
2381
+ element.focus();
2382
+ return _document.activeElement === element;
2383
+ }
2384
+ };
2385
+ module.exports = exports['default'];
2386
+
2387
+ }(focusLabelTabindex, focusLabelTabindex.exports));
2388
+
2389
+ var focusObjectSvgHidden = {exports: {}};
2390
+
2391
+ var svg$1 = {exports: {}};
2392
+
2393
+ (function (module, exports) {
2394
+
2395
+ Object.defineProperty(exports, "__esModule", {
2396
+ value: true
2397
+ });
2398
+ exports.default = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtb' + 'G5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBpZD0ic3ZnIj48dGV4dCB4PSIxMCIgeT0iMjAiIGlkPSJ' + 'zdmctbGluay10ZXh0Ij50ZXh0PC90ZXh0Pjwvc3ZnPg==';
2399
+ module.exports = exports['default'];
2400
+
2401
+ }(svg$1, svg$1.exports));
2402
+
2403
+ (function (module, exports) {
2404
+
2405
+ Object.defineProperty(exports, "__esModule", {
2406
+ value: true
2407
+ });
2408
+
2409
+ var _svg = svg$1.exports;
2410
+
2411
+ var _svg2 = _interopRequireDefault(_svg);
2412
+
2413
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2414
+
2415
+ // Note: IE10 on BrowserStack does not like this test
2416
+
2417
+ exports.default = {
2418
+ element: 'object',
2419
+ mutate: function mutate(element) {
2420
+ element.setAttribute('type', 'image/svg+xml');
2421
+ element.setAttribute('data', _svg2.default);
2422
+ element.setAttribute('width', '200');
2423
+ element.setAttribute('height', '50');
2424
+ element.style.visibility = 'hidden';
2425
+ }
2426
+ };
2427
+ module.exports = exports['default'];
2428
+
2429
+ }(focusObjectSvgHidden, focusObjectSvgHidden.exports));
2430
+
2431
+ var focusObjectSvg = {exports: {}};
2432
+
2433
+ (function (module, exports) {
2434
+
2435
+ Object.defineProperty(exports, "__esModule", {
2436
+ value: true
2437
+ });
2438
+
2439
+ var _svg = svg$1.exports;
2440
+
2441
+ var _svg2 = _interopRequireDefault(_svg);
2442
+
2443
+ var _platform = platform$1.exports;
2444
+
2445
+ var _platform2 = _interopRequireDefault(_platform);
2446
+
2447
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2448
+
2449
+ // Note: IE10 on BrowserStack does not like this test
2450
+
2451
+ exports.default = {
2452
+ name: 'can-focus-object-svg',
2453
+ element: 'object',
2454
+ mutate: function mutate(element) {
2455
+ element.setAttribute('type', 'image/svg+xml');
2456
+ element.setAttribute('data', _svg2.default);
2457
+ element.setAttribute('width', '200');
2458
+ element.setAttribute('height', '50');
2459
+ },
2460
+ validate: function validate(element, focusTarget, _document) {
2461
+ if (_platform2.default.is.GECKO) {
2462
+ // Firefox seems to be handling the object creation asynchronously and thereby produces a false negative test result.
2463
+ // Because we know Firefox is able to focus object elements referencing SVGs, we simply cheat by sniffing the user agent string
2464
+ return true;
2465
+ }
2466
+
2467
+ return _document.activeElement === element;
2468
+ }
2469
+ };
2470
+ module.exports = exports['default'];
2471
+
2472
+ }(focusObjectSvg, focusObjectSvg.exports));
2473
+
2474
+ var focusObjectSwf = {exports: {}};
2475
+
2476
+ (function (module, exports) {
2477
+
2478
+ Object.defineProperty(exports, "__esModule", {
2479
+ value: true
2480
+ });
2481
+
2482
+ exports.default = function () {
2483
+ return result;
2484
+ };
2485
+
2486
+ var _platform = platform$1.exports;
2487
+
2488
+ var _platform2 = _interopRequireDefault(_platform);
2489
+
2490
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2491
+
2492
+ // Every Environment except IE9 considers SWF objects focusable
2493
+ var result = !_platform2.default.is.IE9;
2494
+
2495
+ module.exports = exports['default'];
2496
+
2497
+ }(focusObjectSwf, focusObjectSwf.exports));
2498
+
2499
+ var focusRedirectImgUsemap = {exports: {}};
2500
+
2501
+ (function (module, exports) {
2502
+
2503
+ Object.defineProperty(exports, "__esModule", {
2504
+ value: true
2505
+ });
2506
+
2507
+ var _gif = gif.exports;
2508
+
2509
+ var _gif2 = _interopRequireDefault(_gif);
2510
+
2511
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2512
+
2513
+ exports.default = {
2514
+ element: 'div',
2515
+ mutate: function mutate(element) {
2516
+ element.innerHTML = '<map name="focus-redirect-img-usemap"><area href="#void" shape="rect" coords="63,19,144,45"></map>' + '<img usemap="#focus-redirect-img-usemap" alt="" ' + 'src="' + _gif2.default + '">';
2517
+
2518
+ // focus the <img>, not the <div>
2519
+ return element.querySelector('img');
2520
+ },
2521
+ validate: function validate(element, focusTarget, _document) {
2522
+ var target = element.querySelector('area');
2523
+ return _document.activeElement === target;
2524
+ }
2525
+ };
2526
+ module.exports = exports['default'];
2527
+
2528
+ }(focusRedirectImgUsemap, focusRedirectImgUsemap.exports));
2529
+
2530
+ var focusRedirectLegend = {exports: {}};
2531
+
2532
+ (function (module, exports) {
2533
+
2534
+ Object.defineProperty(exports, "__esModule", {
2535
+ value: true
2536
+ });
2537
+
2538
+ // see https://jsbin.com/nenirisage/edit?html,js,console,output
2539
+
2540
+ exports.default = {
2541
+ element: 'fieldset',
2542
+ mutate: function mutate(element) {
2543
+ element.innerHTML = '<legend>legend</legend><input tabindex="-1"><input tabindex="0">';
2544
+ // take care of focus in validate();
2545
+ return false;
2546
+ },
2547
+ validate: function validate(element, focusTarget, _document) {
2548
+ var focusable = element.querySelector('input[tabindex="-1"]');
2549
+ var tabbable = element.querySelector('input[tabindex="0"]');
2550
+
2551
+ // Firefox requires this test to focus the <fieldset> first, while this is not necessary in
2552
+ // https://jsbin.com/nenirisage/edit?html,js,console,output
2553
+ element.focus();
2554
+
2555
+ element.querySelector('legend').focus();
2556
+ return _document.activeElement === focusable && 'focusable' || _document.activeElement === tabbable && 'tabbable' || '';
2557
+ }
2558
+ };
2559
+ module.exports = exports['default'];
2560
+
2561
+ }(focusRedirectLegend, focusRedirectLegend.exports));
2562
+
2563
+ var focusScrollBody = {exports: {}};
2564
+
2565
+ (function (module, exports) {
2566
+
2567
+ Object.defineProperty(exports, "__esModule", {
2568
+ value: true
2569
+ });
2570
+
2571
+ // https://github.com/medialize/ally.js/issues/21
2572
+ exports.default = {
2573
+ element: 'div',
2574
+ mutate: function mutate(element) {
2575
+ element.setAttribute('style', 'width: 100px; height: 50px; overflow: auto;');
2576
+ element.innerHTML = '<div style="width: 500px; height: 40px;">scrollable content</div>';
2577
+ return element.querySelector('div');
2578
+ }
2579
+ };
2580
+ module.exports = exports['default'];
2581
+
2582
+ }(focusScrollBody, focusScrollBody.exports));
2583
+
2584
+ var focusScrollContainerWithoutOverflow = {exports: {}};
2585
+
2586
+ (function (module, exports) {
2587
+
2588
+ Object.defineProperty(exports, "__esModule", {
2589
+ value: true
2590
+ });
2591
+
2592
+ // https://github.com/medialize/ally.js/issues/21
2593
+ exports.default = {
2594
+ element: 'div',
2595
+ mutate: function mutate(element) {
2596
+ element.setAttribute('style', 'width: 100px; height: 50px;');
2597
+ element.innerHTML = '<div style="width: 500px; height: 40px;">scrollable content</div>';
2598
+ }
2599
+ };
2600
+ module.exports = exports['default'];
2601
+
2602
+ }(focusScrollContainerWithoutOverflow, focusScrollContainerWithoutOverflow.exports));
2603
+
2604
+ var focusScrollContainer = {exports: {}};
2605
+
2606
+ (function (module, exports) {
2607
+
2608
+ Object.defineProperty(exports, "__esModule", {
2609
+ value: true
2610
+ });
2611
+
2612
+ // https://github.com/medialize/ally.js/issues/21
2613
+ exports.default = {
2614
+ element: 'div',
2615
+ mutate: function mutate(element) {
2616
+ element.setAttribute('style', 'width: 100px; height: 50px; overflow: auto;');
2617
+ element.innerHTML = '<div style="width: 500px; height: 40px;">scrollable content</div>';
2618
+ }
2619
+ };
2620
+ module.exports = exports['default'];
2621
+
2622
+ }(focusScrollContainer, focusScrollContainer.exports));
2623
+
2624
+ var focusSummary = {exports: {}};
2625
+
2626
+ (function (module, exports) {
2627
+
2628
+ Object.defineProperty(exports, "__esModule", {
2629
+ value: true
2630
+ });
2631
+ exports.default = {
2632
+ element: 'details',
2633
+ mutate: function mutate(element) {
2634
+ element.innerHTML = '<summary>foo</summary><p>content</p>';
2635
+ return element.firstElementChild;
2636
+ }
2637
+ };
2638
+ module.exports = exports['default'];
2639
+
2640
+ }(focusSummary, focusSummary.exports));
2641
+
2642
+ var focusSvgFocusableAttribute = {exports: {}};
2643
+
2644
+ var svg = {};
2645
+
2646
+ var focus_svgForeignObjectHack = {exports: {}};
2647
+
2648
+ (function (module, exports) {
2649
+
2650
+ Object.defineProperty(exports, "__esModule", {
2651
+ value: true
2652
+ });
2653
+
2654
+ exports.default = function (element) {
2655
+ // Edge13, Edge14: foreignObject focus hack
2656
+ // https://jsbin.com/kunehinugi/edit?html,js,output
2657
+ // https://jsbin.com/fajagi/3/edit?html,js,output
2658
+ var isSvgElement = element.ownerSVGElement || element.nodeName.toLowerCase() === 'svg';
2659
+ if (!isSvgElement) {
2660
+ return false;
2661
+ }
2662
+
2663
+ // inject and focus an <input> element into the SVG element to receive focus
2664
+ var foreignObject = makeFocusableForeignObject();
2665
+ element.appendChild(foreignObject);
2666
+ var input = foreignObject.querySelector('input');
2667
+ input.focus();
2668
+
2669
+ // upon disabling the activeElement, IE and Edge
2670
+ // will not shift focus to <body> like all the other
2671
+ // browsers, but instead find the first focusable
2672
+ // ancestor and shift focus to that
2673
+ input.disabled = true;
2674
+
2675
+ // clean up
2676
+ element.removeChild(foreignObject);
2677
+ return true;
2678
+ };
2679
+
2680
+ function makeFocusableForeignObject() {
2681
+ var fragment = document.createElement('div');
2682
+ fragment.innerHTML = '<svg><foreignObject width="30" height="30">\n <input type="text"/>\n </foreignObject></svg>';
2683
+
2684
+ return fragment.firstChild.firstChild;
2685
+ }
2686
+
2687
+ module.exports = exports['default'];
2688
+
2689
+ }(focus_svgForeignObjectHack, focus_svgForeignObjectHack.exports));
2690
+
2691
+ Object.defineProperty(svg, "__esModule", {
2692
+ value: true
2693
+ });
2694
+ svg.generate = generate;
2695
+ svg.focus = focus;
2696
+ svg.validate = validate;
2697
+
2698
+ var _focus = focus_svgForeignObjectHack.exports;
2699
+
2700
+ var _focus2 = _interopRequireDefault$1(_focus);
2701
+
2702
+ function _interopRequireDefault$1(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2703
+
2704
+ function generate(element) {
2705
+ return '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">' + element + '</svg>';
2706
+ }
2707
+
2708
+ function focus(element) {
2709
+ if (element.focus) {
2710
+ return;
2711
+ }
2712
+
2713
+ try {
2714
+ HTMLElement.prototype.focus.call(element);
2715
+ } catch (e) {
2716
+ (0, _focus2.default)(element);
2717
+ }
2718
+ }
2719
+
2720
+ function validate(element, focusTarget, _document) {
2721
+ focus(focusTarget);
2722
+ return _document.activeElement === focusTarget;
2723
+ }
2724
+
2725
+ (function (module, exports) {
2726
+
2727
+ Object.defineProperty(exports, "__esModule", {
2728
+ value: true
2729
+ });
2730
+
2731
+ var _svg = svg;
2732
+
2733
+ exports.default = {
2734
+ element: 'div',
2735
+ mutate: function mutate(element) {
2736
+ element.innerHTML = (0, _svg.generate)('<text focusable="true">a</text>');
2737
+ return element.querySelector('text');
2738
+ },
2739
+ validate: _svg.validate
2740
+ };
2741
+ module.exports = exports['default'];
2742
+
2743
+ }(focusSvgFocusableAttribute, focusSvgFocusableAttribute.exports));
2744
+
2745
+ var focusSvgTabindexAttribute = {exports: {}};
2746
+
2747
+ (function (module, exports) {
2748
+
2749
+ Object.defineProperty(exports, "__esModule", {
2750
+ value: true
2751
+ });
2752
+
2753
+ var _svg = svg;
2754
+
2755
+ exports.default = {
2756
+ element: 'div',
2757
+ mutate: function mutate(element) {
2758
+ element.innerHTML = (0, _svg.generate)('<text tabindex="0">a</text>');
2759
+ return element.querySelector('text');
2760
+ },
2761
+ validate: _svg.validate
2762
+ };
2763
+ module.exports = exports['default'];
2764
+
2765
+ }(focusSvgTabindexAttribute, focusSvgTabindexAttribute.exports));
2766
+
2767
+ var focusSvgNegativeTabindexAttribute = {exports: {}};
2768
+
2769
+ (function (module, exports) {
2770
+
2771
+ Object.defineProperty(exports, "__esModule", {
2772
+ value: true
2773
+ });
2774
+
2775
+ var _svg = svg;
2776
+
2777
+ exports.default = {
2778
+ element: 'div',
2779
+ mutate: function mutate(element) {
2780
+ element.innerHTML = (0, _svg.generate)('<text tabindex="-1">a</text>');
2781
+ return element.querySelector('text');
2782
+ },
2783
+ validate: _svg.validate
2784
+ };
2785
+ module.exports = exports['default'];
2786
+
2787
+ }(focusSvgNegativeTabindexAttribute, focusSvgNegativeTabindexAttribute.exports));
2788
+
2789
+ var focusSvgUseTabindex = {exports: {}};
2790
+
2791
+ (function (module, exports) {
2792
+
2793
+ Object.defineProperty(exports, "__esModule", {
2794
+ value: true
2795
+ });
2796
+
2797
+ var _svg = svg;
2798
+
2799
+ exports.default = {
2800
+ element: 'div',
2801
+ mutate: function mutate(element) {
2802
+ element.innerHTML = (0, _svg.generate)(['<g id="ally-test-target"><a xlink:href="#void"><text>link</text></a></g>', '<use xlink:href="#ally-test-target" x="0" y="0" tabindex="-1" />'].join(''));
2803
+
2804
+ return element.querySelector('use');
2805
+ },
2806
+ validate: _svg.validate
2807
+ };
2808
+ module.exports = exports['default'];
2809
+
2810
+ }(focusSvgUseTabindex, focusSvgUseTabindex.exports));
2811
+
2812
+ var focusSvgForeignobjectTabindex = {exports: {}};
2813
+
2814
+ (function (module, exports) {
2815
+
2816
+ Object.defineProperty(exports, "__esModule", {
2817
+ value: true
2818
+ });
2819
+
2820
+ var _svg = svg;
2821
+
2822
+ exports.default = {
2823
+ element: 'div',
2824
+ mutate: function mutate(element) {
2825
+ element.innerHTML = (0, _svg.generate)('<foreignObject tabindex="-1"><input type="text" /></foreignObject>');
2826
+ // Safari 8's quersSelector() can't identify foreignObject, but getElementyByTagName() can
2827
+ return element.querySelector('foreignObject') || element.getElementsByTagName('foreignObject')[0];
2828
+ },
2829
+ validate: _svg.validate
2830
+
2831
+ };
2832
+ module.exports = exports['default'];
2833
+
2834
+ }(focusSvgForeignobjectTabindex, focusSvgForeignobjectTabindex.exports));
2835
+
2836
+ var focusSvgInIframe = {exports: {}};
2837
+
2838
+ (function (module, exports) {
2839
+
2840
+ Object.defineProperty(exports, "__esModule", {
2841
+ value: true
2842
+ });
2843
+
2844
+ exports.default = function () {
2845
+ return result;
2846
+ };
2847
+
2848
+ var _platform = platform$1.exports;
2849
+
2850
+ var _platform2 = _interopRequireDefault(_platform);
2851
+
2852
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2853
+
2854
+ // Firefox seems to be handling the SVG-document-in-iframe creation asynchronously
2855
+ // and thereby produces a false negative test result. Thus the test is pointless
2856
+ // and we resort to UA sniffing once again.
2857
+ // see http://jsbin.com/vunadohoko/1/edit?js,console,output
2858
+
2859
+ var result = Boolean(_platform2.default.is.GECKO && typeof SVGElement !== 'undefined' && SVGElement.prototype.focus);
2860
+
2861
+ module.exports = exports['default'];
2862
+
2863
+ }(focusSvgInIframe, focusSvgInIframe.exports));
2864
+
2865
+ var focusSvg = {exports: {}};
2866
+
2867
+ (function (module, exports) {
2868
+
2869
+ Object.defineProperty(exports, "__esModule", {
2870
+ value: true
2871
+ });
2872
+
2873
+ var _svg = svg;
2874
+
2875
+ exports.default = {
2876
+ element: 'div',
2877
+ mutate: function mutate(element) {
2878
+ element.innerHTML = (0, _svg.generate)('');
2879
+ return element.firstChild;
2880
+ },
2881
+ validate: _svg.validate
2882
+ };
2883
+ module.exports = exports['default'];
2884
+
2885
+ }(focusSvg, focusSvg.exports));
2886
+
2887
+ var focusTabindexTrailingCharacters = {exports: {}};
2888
+
2889
+ (function (module, exports) {
2890
+
2891
+ Object.defineProperty(exports, "__esModule", {
2892
+ value: true
2893
+ });
2894
+
2895
+ // Firefox allows *any* value and treats invalid values like tabindex="-1"
2896
+ // @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054
2897
+ exports.default = {
2898
+ element: 'div',
2899
+ mutate: function mutate(element) {
2900
+ element.setAttribute('tabindex', '3x');
2901
+ }
2902
+ };
2903
+ module.exports = exports['default'];
2904
+
2905
+ }(focusTabindexTrailingCharacters, focusTabindexTrailingCharacters.exports));
2906
+
2907
+ var focusTable = {exports: {}};
2908
+
2909
+ (function (module, exports) {
2910
+
2911
+ Object.defineProperty(exports, "__esModule", {
2912
+ value: true
2913
+ });
2914
+ exports.default = {
2915
+ element: 'table',
2916
+ mutate: function mutate(element, wrapper, _document) {
2917
+ // IE9 has a problem replacing TBODY contents with innerHTML.
2918
+ // https://stackoverflow.com/a/8097055/515124
2919
+ // element.innerHTML = '<tr><td>cell</td></tr>';
2920
+ var fragment = _document.createDocumentFragment();
2921
+ fragment.innerHTML = '<tr><td>cell</td></tr>';
2922
+ element.appendChild(fragment);
2923
+ }
2924
+ };
2925
+ module.exports = exports['default'];
2926
+
2927
+ }(focusTable, focusTable.exports));
2928
+
2929
+ var focusVideoWithoutControls = {exports: {}};
2930
+
2931
+ var mp4 = {exports: {}};
2932
+
2933
+ (function (module, exports) {
2934
+
2935
+ Object.defineProperty(exports, "__esModule", {
2936
+ value: true
2937
+ });
2938
+
2939
+ var _gif = gif.exports;
2940
+
2941
+ var _gif2 = _interopRequireDefault(_gif);
2942
+
2943
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2944
+
2945
+ exports.default = _gif2.default;
2946
+ // export default 'data:video/mp4;base64,video-focus-test';
2947
+
2948
+ module.exports = exports['default'];
2949
+
2950
+ }(mp4, mp4.exports));
2951
+
2952
+ (function (module, exports) {
2953
+
2954
+ Object.defineProperty(exports, "__esModule", {
2955
+ value: true
2956
+ });
2957
+
2958
+ var _mp = mp4.exports;
2959
+
2960
+ var _mp2 = _interopRequireDefault(_mp);
2961
+
2962
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2963
+
2964
+ exports.default = {
2965
+ element: 'video',
2966
+ mutate: function mutate(element) {
2967
+ try {
2968
+ // invalid media file can trigger warning in console, data-uri to prevent HTTP request
2969
+ element.setAttribute('src', _mp2.default);
2970
+ } catch (e) {
2971
+ // IE9 may throw "Error: Not implemented"
2972
+ }
2973
+ }
2974
+ };
2975
+ module.exports = exports['default'];
2976
+
2977
+ }(focusVideoWithoutControls, focusVideoWithoutControls.exports));
2978
+
2979
+ var tabsequenceAreaAtImgPosition = {exports: {}};
2980
+
2981
+ (function (module, exports) {
2982
+
2983
+ Object.defineProperty(exports, "__esModule", {
2984
+ value: true
2985
+ });
2986
+
2987
+ exports.default = function () {
2988
+ return result;
2989
+ };
2990
+
2991
+ var _platform = platform$1.exports;
2992
+
2993
+ var _platform2 = _interopRequireDefault(_platform);
2994
+
2995
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2996
+
2997
+ // https://jsbin.com/vafaba/3/edit?html,js,console,output
2998
+ var result = _platform2.default.is.GECKO || _platform2.default.is.TRIDENT || _platform2.default.is.EDGE;
2999
+
3000
+ module.exports = exports['default'];
3001
+
3002
+ }(tabsequenceAreaAtImgPosition, tabsequenceAreaAtImgPosition.exports));
3003
+
3004
+ (function (module, exports) {
3005
+
3006
+ Object.defineProperty(exports, "__esModule", {
3007
+ value: true
3008
+ });
3009
+
3010
+ exports.default = function () {
3011
+ if (supportsCache$1) {
3012
+ return supportsCache$1;
3013
+ }
3014
+
3015
+ supportsCache$1 = _supportsCache2.default.get();
3016
+ if (!supportsCache$1.time) {
3017
+ _supportsCache2.default.set(executeTests());
3018
+ supportsCache$1 = _supportsCache2.default.get();
3019
+ }
3020
+
3021
+ return supportsCache$1;
3022
+ };
3023
+
3024
+ var _detectFocus = detectFocus.exports;
3025
+
3026
+ var _detectFocus2 = _interopRequireDefault(_detectFocus);
3027
+
3028
+ var _supportsCache = supportsCache.exports;
3029
+
3030
+ var _supportsCache2 = _interopRequireDefault(_supportsCache);
3031
+
3032
+ var _cssShadowPiercingDeepCombinator = cssShadowPiercingDeepCombinator.exports;
3033
+
3034
+ var _cssShadowPiercingDeepCombinator2 = _interopRequireDefault(_cssShadowPiercingDeepCombinator);
3035
+
3036
+ var _focusAreaImgTabindex = focusAreaImgTabindex.exports;
3037
+
3038
+ var _focusAreaImgTabindex2 = _interopRequireDefault(_focusAreaImgTabindex);
3039
+
3040
+ var _focusAreaTabindex = focusAreaTabindex.exports;
3041
+
3042
+ var _focusAreaTabindex2 = _interopRequireDefault(_focusAreaTabindex);
3043
+
3044
+ var _focusAreaWithoutHref = focusAreaWithoutHref.exports;
3045
+
3046
+ var _focusAreaWithoutHref2 = _interopRequireDefault(_focusAreaWithoutHref);
3047
+
3048
+ var _focusAudioWithoutControls = focusAudioWithoutControls.exports;
3049
+
3050
+ var _focusAudioWithoutControls2 = _interopRequireDefault(_focusAudioWithoutControls);
3051
+
3052
+ var _focusBrokenImageMap = focusBrokenImageMap.exports;
3053
+
3054
+ var _focusBrokenImageMap2 = _interopRequireDefault(_focusBrokenImageMap);
3055
+
3056
+ var _focusChildrenOfFocusableFlexbox = focusChildrenOfFocusableFlexbox.exports;
3057
+
3058
+ var _focusChildrenOfFocusableFlexbox2 = _interopRequireDefault(_focusChildrenOfFocusableFlexbox);
3059
+
3060
+ var _focusFieldsetDisabled = focusFieldsetDisabled.exports;
3061
+
3062
+ var _focusFieldsetDisabled2 = _interopRequireDefault(_focusFieldsetDisabled);
3063
+
3064
+ var _focusFieldset = focusFieldset.exports;
3065
+
3066
+ var _focusFieldset2 = _interopRequireDefault(_focusFieldset);
3067
+
3068
+ var _focusFlexboxContainer = focusFlexboxContainer.exports;
3069
+
3070
+ var _focusFlexboxContainer2 = _interopRequireDefault(_focusFlexboxContainer);
3071
+
3072
+ var _focusFormDisabled = focusFormDisabled.exports;
3073
+
3074
+ var _focusFormDisabled2 = _interopRequireDefault(_focusFormDisabled);
3075
+
3076
+ var _focusImgIsmap = focusImgIsmap.exports;
3077
+
3078
+ var _focusImgIsmap2 = _interopRequireDefault(_focusImgIsmap);
3079
+
3080
+ var _focusImgUsemapTabindex = focusImgUsemapTabindex.exports;
3081
+
3082
+ var _focusImgUsemapTabindex2 = _interopRequireDefault(_focusImgUsemapTabindex);
3083
+
3084
+ var _focusInHiddenIframe = focusInHiddenIframe.exports;
3085
+
3086
+ var _focusInHiddenIframe2 = _interopRequireDefault(_focusInHiddenIframe);
3087
+
3088
+ var _focusInZeroDimensionObject = focusInZeroDimensionObject.exports;
3089
+
3090
+ var _focusInZeroDimensionObject2 = _interopRequireDefault(_focusInZeroDimensionObject);
3091
+
3092
+ var _focusInvalidTabindex = focusInvalidTabindex.exports;
3093
+
3094
+ var _focusInvalidTabindex2 = _interopRequireDefault(_focusInvalidTabindex);
3095
+
3096
+ var _focusLabelTabindex = focusLabelTabindex.exports;
3097
+
3098
+ var _focusLabelTabindex2 = _interopRequireDefault(_focusLabelTabindex);
3099
+
3100
+ var _focusObjectSvgHidden = focusObjectSvgHidden.exports;
3101
+
3102
+ var _focusObjectSvgHidden2 = _interopRequireDefault(_focusObjectSvgHidden);
3103
+
3104
+ var _focusObjectSvg = focusObjectSvg.exports;
3105
+
3106
+ var _focusObjectSvg2 = _interopRequireDefault(_focusObjectSvg);
3107
+
3108
+ var _focusObjectSwf = focusObjectSwf.exports;
3109
+
3110
+ var _focusObjectSwf2 = _interopRequireDefault(_focusObjectSwf);
3111
+
3112
+ var _focusRedirectImgUsemap = focusRedirectImgUsemap.exports;
3113
+
3114
+ var _focusRedirectImgUsemap2 = _interopRequireDefault(_focusRedirectImgUsemap);
3115
+
3116
+ var _focusRedirectLegend = focusRedirectLegend.exports;
3117
+
3118
+ var _focusRedirectLegend2 = _interopRequireDefault(_focusRedirectLegend);
3119
+
3120
+ var _focusScrollBody = focusScrollBody.exports;
3121
+
3122
+ var _focusScrollBody2 = _interopRequireDefault(_focusScrollBody);
3123
+
3124
+ var _focusScrollContainerWithoutOverflow = focusScrollContainerWithoutOverflow.exports;
3125
+
3126
+ var _focusScrollContainerWithoutOverflow2 = _interopRequireDefault(_focusScrollContainerWithoutOverflow);
3127
+
3128
+ var _focusScrollContainer = focusScrollContainer.exports;
3129
+
3130
+ var _focusScrollContainer2 = _interopRequireDefault(_focusScrollContainer);
3131
+
3132
+ var _focusSummary = focusSummary.exports;
3133
+
3134
+ var _focusSummary2 = _interopRequireDefault(_focusSummary);
3135
+
3136
+ var _focusSvgFocusableAttribute = focusSvgFocusableAttribute.exports;
3137
+
3138
+ var _focusSvgFocusableAttribute2 = _interopRequireDefault(_focusSvgFocusableAttribute);
3139
+
3140
+ var _focusSvgTabindexAttribute = focusSvgTabindexAttribute.exports;
3141
+
3142
+ var _focusSvgTabindexAttribute2 = _interopRequireDefault(_focusSvgTabindexAttribute);
3143
+
3144
+ var _focusSvgNegativeTabindexAttribute = focusSvgNegativeTabindexAttribute.exports;
3145
+
3146
+ var _focusSvgNegativeTabindexAttribute2 = _interopRequireDefault(_focusSvgNegativeTabindexAttribute);
3147
+
3148
+ var _focusSvgUseTabindex = focusSvgUseTabindex.exports;
3149
+
3150
+ var _focusSvgUseTabindex2 = _interopRequireDefault(_focusSvgUseTabindex);
3151
+
3152
+ var _focusSvgForeignobjectTabindex = focusSvgForeignobjectTabindex.exports;
3153
+
3154
+ var _focusSvgForeignobjectTabindex2 = _interopRequireDefault(_focusSvgForeignobjectTabindex);
3155
+
3156
+ var _focusSvgInIframe = focusSvgInIframe.exports;
3157
+
3158
+ var _focusSvgInIframe2 = _interopRequireDefault(_focusSvgInIframe);
3159
+
3160
+ var _focusSvg = focusSvg.exports;
3161
+
3162
+ var _focusSvg2 = _interopRequireDefault(_focusSvg);
3163
+
3164
+ var _focusTabindexTrailingCharacters = focusTabindexTrailingCharacters.exports;
3165
+
3166
+ var _focusTabindexTrailingCharacters2 = _interopRequireDefault(_focusTabindexTrailingCharacters);
3167
+
3168
+ var _focusTable = focusTable.exports;
3169
+
3170
+ var _focusTable2 = _interopRequireDefault(_focusTable);
3171
+
3172
+ var _focusVideoWithoutControls = focusVideoWithoutControls.exports;
3173
+
3174
+ var _focusVideoWithoutControls2 = _interopRequireDefault(_focusVideoWithoutControls);
3175
+
3176
+ var _tabsequenceAreaAtImgPosition = tabsequenceAreaAtImgPosition.exports;
3177
+
3178
+ var _tabsequenceAreaAtImgPosition2 = _interopRequireDefault(_tabsequenceAreaAtImgPosition);
3179
+
3180
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3181
+
3182
+ var testCallbacks = {
3183
+ cssShadowPiercingDeepCombinator: _cssShadowPiercingDeepCombinator2.default,
3184
+ focusInZeroDimensionObject: _focusInZeroDimensionObject2.default,
3185
+ focusObjectSwf: _focusObjectSwf2.default,
3186
+ focusSvgInIframe: _focusSvgInIframe2.default,
3187
+ tabsequenceAreaAtImgPosition: _tabsequenceAreaAtImgPosition2.default
3188
+ };
3189
+
3190
+ var testDescriptions = {
3191
+ focusAreaImgTabindex: _focusAreaImgTabindex2.default,
3192
+ focusAreaTabindex: _focusAreaTabindex2.default,
3193
+ focusAreaWithoutHref: _focusAreaWithoutHref2.default,
3194
+ focusAudioWithoutControls: _focusAudioWithoutControls2.default,
3195
+ focusBrokenImageMap: _focusBrokenImageMap2.default,
3196
+ focusChildrenOfFocusableFlexbox: _focusChildrenOfFocusableFlexbox2.default,
3197
+ focusFieldsetDisabled: _focusFieldsetDisabled2.default,
3198
+ focusFieldset: _focusFieldset2.default,
3199
+ focusFlexboxContainer: _focusFlexboxContainer2.default,
3200
+ focusFormDisabled: _focusFormDisabled2.default,
3201
+ focusImgIsmap: _focusImgIsmap2.default,
3202
+ focusImgUsemapTabindex: _focusImgUsemapTabindex2.default,
3203
+ focusInHiddenIframe: _focusInHiddenIframe2.default,
3204
+ focusInvalidTabindex: _focusInvalidTabindex2.default,
3205
+ focusLabelTabindex: _focusLabelTabindex2.default,
3206
+ focusObjectSvg: _focusObjectSvg2.default,
3207
+ focusObjectSvgHidden: _focusObjectSvgHidden2.default,
3208
+ focusRedirectImgUsemap: _focusRedirectImgUsemap2.default,
3209
+ focusRedirectLegend: _focusRedirectLegend2.default,
3210
+ focusScrollBody: _focusScrollBody2.default,
3211
+ focusScrollContainerWithoutOverflow: _focusScrollContainerWithoutOverflow2.default,
3212
+ focusScrollContainer: _focusScrollContainer2.default,
3213
+ focusSummary: _focusSummary2.default,
3214
+ focusSvgFocusableAttribute: _focusSvgFocusableAttribute2.default,
3215
+ focusSvgTabindexAttribute: _focusSvgTabindexAttribute2.default,
3216
+ focusSvgNegativeTabindexAttribute: _focusSvgNegativeTabindexAttribute2.default,
3217
+ focusSvgUseTabindex: _focusSvgUseTabindex2.default,
3218
+ focusSvgForeignobjectTabindex: _focusSvgForeignobjectTabindex2.default,
3219
+ focusSvg: _focusSvg2.default,
3220
+ focusTabindexTrailingCharacters: _focusTabindexTrailingCharacters2.default,
3221
+ focusTable: _focusTable2.default,
3222
+ focusVideoWithoutControls: _focusVideoWithoutControls2.default
3223
+ };
3224
+
3225
+ function executeTests() {
3226
+ var results = (0, _detectFocus2.default)(testDescriptions);
3227
+ Object.keys(testCallbacks).forEach(function (key) {
3228
+ results[key] = testCallbacks[key]();
3229
+ });
3230
+
3231
+ return results;
3232
+ }
3233
+
3234
+ var supportsCache$1 = null;
3235
+
3236
+ module.exports = exports['default'];
3237
+
3238
+ }(supports, supports.exports));
3239
+
3240
+ (function (module, exports) {
3241
+
3242
+ Object.defineProperty(exports, "__esModule", {
3243
+ value: true
3244
+ });
3245
+
3246
+ exports.default = function (context) {
3247
+ if (!supports$1) {
3248
+ supports$1 = (0, _supports3.default)();
3249
+ }
3250
+
3251
+ var validIntegerPattern = supports$1.focusTabindexTrailingCharacters ? validIntegerPatternWithTrailing : validIntegerPatternNoTrailing;
3252
+
3253
+ var element = (0, _contextToElement2.default)({
3254
+ label: 'is/valid-tabindex',
3255
+ resolveDocument: true,
3256
+ context: context
3257
+ });
3258
+
3259
+ // Edge 14 has a capitalization problem on SVG elements,
3260
+ // see https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/9282058/
3261
+ var hasTabindex = element.hasAttribute('tabindex');
3262
+ var hasTabIndex = element.hasAttribute('tabIndex');
3263
+
3264
+ if (!hasTabindex && !hasTabIndex) {
3265
+ return false;
3266
+ }
3267
+
3268
+ // older Firefox and Internet Explorer don't support tabindex on SVG elements
3269
+ var isSvgElement = element.ownerSVGElement || element.nodeName.toLowerCase() === 'svg';
3270
+ if (isSvgElement && !supports$1.focusSvgTabindexAttribute) {
3271
+ return false;
3272
+ }
3273
+
3274
+ // @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054
3275
+ if (supports$1.focusInvalidTabindex) {
3276
+ return true;
3277
+ }
3278
+
3279
+ // an element matches the tabindex selector even if its value is invalid
3280
+ var tabindex = element.getAttribute(hasTabindex ? 'tabindex' : 'tabIndex');
3281
+ // IE11 parses tabindex="" as the value "-32768"
3282
+ // @browser-issue Trident https://connect.microsoft.com/IE/feedback/details/1072965
3283
+ if (tabindex === '-32768') {
3284
+ return false;
3285
+ }
3286
+
3287
+ return Boolean(tabindex && validIntegerPattern.test(tabindex));
3288
+ };
3289
+
3290
+ var _contextToElement = contextToElement.exports;
3291
+
3292
+ var _contextToElement2 = _interopRequireDefault(_contextToElement);
3293
+
3294
+ var _supports2 = supports.exports;
3295
+
3296
+ var _supports3 = _interopRequireDefault(_supports2);
3297
+
3298
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3299
+
3300
+ // determine if an element's tabindex attribute has a valid value
3301
+
3302
+ var supports$1 = void 0;
3303
+
3304
+ // https://www.w3.org/TR/html5/infrastructure.html#rules-for-parsing-integers
3305
+ // NOTE: all browsers agree to allow trailing spaces as well
3306
+ var validIntegerPatternNoTrailing = /^\s*(-|\+)?[0-9]+\s*$/;
3307
+ var validIntegerPatternWithTrailing = /^\s*(-|\+)?[0-9]+.*$/;
3308
+
3309
+ module.exports = exports['default'];
3310
+
3311
+ }(validTabindex, validTabindex.exports));
3312
+
3313
+ (function (module, exports) {
3314
+
3315
+ Object.defineProperty(exports, "__esModule", {
3316
+ value: true
3317
+ });
3318
+
3319
+ exports.default = function (element) {
3320
+ if (!(0, _validTabindex2.default)(element)) {
3321
+ return null;
3322
+ }
3323
+
3324
+ // Edge 14 has a capitalization problem on SVG elements,
3325
+ // see https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/9282058/
3326
+ var hasTabindex = element.hasAttribute('tabindex');
3327
+ var attributeName = hasTabindex ? 'tabindex' : 'tabIndex';
3328
+
3329
+ // @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054
3330
+ var tabindex = parseInt(element.getAttribute(attributeName), 10);
3331
+ return isNaN(tabindex) ? -1 : tabindex;
3332
+ };
3333
+
3334
+ var _validTabindex = validTabindex.exports;
3335
+
3336
+ var _validTabindex2 = _interopRequireDefault(_validTabindex);
3337
+
3338
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3339
+
3340
+ module.exports = exports['default'];
3341
+
3342
+ }(tabindexValue, tabindexValue.exports));
3343
+
3344
+ var is_util = {};
3345
+
3346
+ Object.defineProperty(is_util, "__esModule", {
3347
+ value: true
3348
+ });
3349
+ is_util.isUserModifyWritable = isUserModifyWritable;
3350
+ is_util.hasCssOverflowScroll = hasCssOverflowScroll;
3351
+ is_util.hasCssDisplayFlex = hasCssDisplayFlex;
3352
+ is_util.isScrollableContainer = isScrollableContainer;
3353
+
3354
+ // this is a shared utility file for focus-relevant.js and tabbable.js
3355
+ // separate testing of this file's functions is not necessary,
3356
+ // as they're implicitly tested by way of the consumers
3357
+
3358
+ function isUserModifyWritable(style) {
3359
+ // https://www.w3.org/TR/1999/WD-css3-userint-19990916#user-modify
3360
+ // https://github.com/medialize/ally.js/issues/17
3361
+ var userModify = style.webkitUserModify || '';
3362
+ return Boolean(userModify && userModify.indexOf('write') !== -1);
3363
+ }
3364
+
3365
+ function hasCssOverflowScroll(style) {
3366
+ return [style.getPropertyValue('overflow'), style.getPropertyValue('overflow-x'), style.getPropertyValue('overflow-y')].some(function (overflow) {
3367
+ return overflow === 'auto' || overflow === 'scroll';
3368
+ });
3369
+ }
3370
+
3371
+ function hasCssDisplayFlex(style) {
3372
+ return style.display.indexOf('flex') > -1;
3373
+ }
3374
+
3375
+ function isScrollableContainer(element, nodeName, parentNodeName, parentStyle) {
3376
+ if (nodeName !== 'div' && nodeName !== 'span') {
3377
+ // Internet Explorer advances scrollable containers and bodies to focusable
3378
+ // only if the scrollable container is <div> or <span> - this does *not*
3379
+ // happen for <section>, <article>, …
3380
+ return false;
3381
+ }
3382
+
3383
+ if (parentNodeName && parentNodeName !== 'div' && parentNodeName !== 'span' && !hasCssOverflowScroll(parentStyle)) {
3384
+ return false;
3385
+ }
3386
+
3387
+ return element.offsetHeight < element.scrollHeight || element.offsetWidth < element.scrollWidth;
3388
+ }
3389
+
3390
+ (function (module, exports) {
3391
+
3392
+ Object.defineProperty(exports, "__esModule", {
3393
+ value: true
3394
+ });
3395
+
3396
+ var _parents = parents.exports;
3397
+
3398
+ var _parents2 = _interopRequireDefault(_parents);
3399
+
3400
+ var _contextToElement = contextToElement.exports;
3401
+
3402
+ var _contextToElement2 = _interopRequireDefault(_contextToElement);
3403
+
3404
+ var _elementMatches = elementMatches.exports;
3405
+
3406
+ var _elementMatches2 = _interopRequireDefault(_elementMatches);
3407
+
3408
+ var _tabindexValue = tabindexValue.exports;
3409
+
3410
+ var _tabindexValue2 = _interopRequireDefault(_tabindexValue);
3411
+
3412
+ var _validTabindex = validTabindex.exports;
3413
+
3414
+ var _validTabindex2 = _interopRequireDefault(_validTabindex);
3415
+
3416
+ var _is = is_util;
3417
+
3418
+ var _supports2 = supports.exports;
3419
+
3420
+ var _supports3 = _interopRequireDefault(_supports2);
3421
+
3422
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3423
+
3424
+ var supports$1 = void 0;
3425
+ // determine if an element supports.can be focused by script regardless
3426
+ // of the element actually being focusable at the time of execution
3427
+ // i.e. <input disabled> is conisdered focus-relevant, but not focusable
3428
+
3429
+ function isFocusRelevantRules() {
3430
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
3431
+ context = _ref.context,
3432
+ _ref$except = _ref.except,
3433
+ except = _ref$except === undefined ? {
3434
+ flexbox: false,
3435
+ scrollable: false,
3436
+ shadow: false
3437
+ } : _ref$except;
3438
+
3439
+ if (!supports$1) {
3440
+ supports$1 = (0, _supports3.default)();
3441
+ }
3442
+
3443
+ var element = (0, _contextToElement2.default)({
3444
+ label: 'is/focus-relevant',
3445
+ resolveDocument: true,
3446
+ context: context
3447
+ });
3448
+
3449
+ if (!except.shadow && element.shadowRoot) {
3450
+ // a ShadowDOM host receives focus when the focus moves to its content
3451
+ return true;
3452
+ }
3453
+
3454
+ var nodeName = element.nodeName.toLowerCase();
3455
+
3456
+ if (nodeName === 'input' && element.type === 'hidden') {
3457
+ // input[type="hidden"] supports.cannot be focused
3458
+ return false;
3459
+ }
3460
+
3461
+ if (nodeName === 'input' || nodeName === 'select' || nodeName === 'button' || nodeName === 'textarea') {
3462
+ return true;
3463
+ }
3464
+
3465
+ if (nodeName === 'legend' && supports$1.focusRedirectLegend) {
3466
+ // specifics filtered in is/focusable
3467
+ return true;
3468
+ }
3469
+
3470
+ if (nodeName === 'label') {
3471
+ // specifics filtered in is/focusable
3472
+ return true;
3473
+ }
3474
+
3475
+ if (nodeName === 'area') {
3476
+ // specifics filtered in is/focusable
3477
+ return true;
3478
+ }
3479
+
3480
+ if (nodeName === 'a' && element.hasAttribute('href')) {
3481
+ return true;
3482
+ }
3483
+
3484
+ if (nodeName === 'object' && element.hasAttribute('usemap')) {
3485
+ // object[usemap] is not focusable in any browser
3486
+ return false;
3487
+ }
3488
+
3489
+ if (nodeName === 'object') {
3490
+ var svgType = element.getAttribute('type');
3491
+ if (!supports$1.focusObjectSvg && svgType === 'image/svg+xml') {
3492
+ // object[type="image/svg+xml"] is not focusable in Internet Explorer
3493
+ return false;
3494
+ } else if (!supports$1.focusObjectSwf && svgType === 'application/x-shockwave-flash') {
3495
+ // object[type="application/x-shockwave-flash"] is not focusable in Internet Explorer 9
3496
+ return false;
3497
+ }
3498
+ }
3499
+
3500
+ if (nodeName === 'iframe' || nodeName === 'object') {
3501
+ // browsing context containers
3502
+ return true;
3503
+ }
3504
+
3505
+ if (nodeName === 'embed' || nodeName === 'keygen') {
3506
+ // embed is considered focus-relevant but not focusable
3507
+ // see https://github.com/medialize/ally.js/issues/82
3508
+ return true;
3509
+ }
3510
+
3511
+ if (element.hasAttribute('contenteditable')) {
3512
+ // also see CSS property user-modify below
3513
+ return true;
3514
+ }
3515
+
3516
+ if (nodeName === 'audio' && (supports$1.focusAudioWithoutControls || element.hasAttribute('controls'))) {
3517
+ return true;
3518
+ }
3519
+
3520
+ if (nodeName === 'video' && (supports$1.focusVideoWithoutControls || element.hasAttribute('controls'))) {
3521
+ return true;
3522
+ }
3523
+
3524
+ if (supports$1.focusSummary && nodeName === 'summary') {
3525
+ return true;
3526
+ }
3527
+
3528
+ var validTabindex = (0, _validTabindex2.default)(element);
3529
+
3530
+ if (nodeName === 'img' && element.hasAttribute('usemap')) {
3531
+ // Gecko, Trident and Edge do not allow an image with an image map and tabindex to be focused,
3532
+ // it appears the tabindex is overruled so focus is still forwarded to the <map>
3533
+ return validTabindex && supports$1.focusImgUsemapTabindex || supports$1.focusRedirectImgUsemap;
3534
+ }
3535
+
3536
+ if (supports$1.focusTable && (nodeName === 'table' || nodeName === 'td')) {
3537
+ // IE10-11 supports.can focus <table> and <td>
3538
+ return true;
3539
+ }
3540
+
3541
+ if (supports$1.focusFieldset && nodeName === 'fieldset') {
3542
+ // IE10-11 supports.can focus <fieldset>
3543
+ return true;
3544
+ }
3545
+
3546
+ var isSvgElement = nodeName === 'svg';
3547
+ var isSvgContent = element.ownerSVGElement;
3548
+ var focusableAttribute = element.getAttribute('focusable');
3549
+ var tabindex = (0, _tabindexValue2.default)(element);
3550
+
3551
+ if (nodeName === 'use' && tabindex !== null && !supports$1.focusSvgUseTabindex) {
3552
+ // <use> cannot be made focusable by adding a tabindex attribute anywhere but Blink and WebKit
3553
+ return false;
3554
+ }
3555
+
3556
+ if (nodeName === 'foreignobject') {
3557
+ // <use> can only be made focusable in Blink and WebKit
3558
+ return tabindex !== null && supports$1.focusSvgForeignobjectTabindex;
3559
+ }
3560
+
3561
+ if ((0, _elementMatches2.default)(element, 'svg a') && element.hasAttribute('xlink:href')) {
3562
+ return true;
3563
+ }
3564
+
3565
+ if ((isSvgElement || isSvgContent) && element.focus && !supports$1.focusSvgNegativeTabindexAttribute && tabindex < 0) {
3566
+ // Firefox 51 and 52 treat any natively tabbable SVG element with
3567
+ // tabindex="-1" as tabbable and everything else as inert
3568
+ // see https://bugzilla.mozilla.org/show_bug.cgi?id=1302340
3569
+ return false;
3570
+ }
3571
+
3572
+ if (isSvgElement) {
3573
+ return validTabindex || supports$1.focusSvg || supports$1.focusSvgInIframe
3574
+ // Internet Explorer understands the focusable attribute introduced in SVG Tiny 1.2
3575
+ || Boolean(supports$1.focusSvgFocusableAttribute && focusableAttribute && focusableAttribute === 'true');
3576
+ }
3577
+
3578
+ if (isSvgContent) {
3579
+ if (supports$1.focusSvgTabindexAttribute && validTabindex) {
3580
+ return true;
3581
+ }
3582
+
3583
+ if (supports$1.focusSvgFocusableAttribute) {
3584
+ // Internet Explorer understands the focusable attribute introduced in SVG Tiny 1.2
3585
+ return focusableAttribute === 'true';
3586
+ }
3587
+ }
3588
+
3589
+ // https://www.w3.org/TR/html5/editing.html#sequential-focus-navigation-and-the-tabindex-attribute
3590
+ if (validTabindex) {
3591
+ return true;
3592
+ }
3593
+
3594
+ var style = window.getComputedStyle(element, null);
3595
+ if ((0, _is.isUserModifyWritable)(style)) {
3596
+ return true;
3597
+ }
3598
+
3599
+ if (supports$1.focusImgIsmap && nodeName === 'img' && element.hasAttribute('ismap')) {
3600
+ // IE10-11 considers the <img> in <a href><img ismap> focusable
3601
+ // https://github.com/medialize/ally.js/issues/20
3602
+ var hasLinkParent = (0, _parents2.default)({ context: element }).some(function (parent) {
3603
+ return parent.nodeName.toLowerCase() === 'a' && parent.hasAttribute('href');
3604
+ });
3605
+
3606
+ if (hasLinkParent) {
3607
+ return true;
3608
+ }
3609
+ }
3610
+
3611
+ // https://github.com/medialize/ally.js/issues/21
3612
+ if (!except.scrollable && supports$1.focusScrollContainer) {
3613
+ if (supports$1.focusScrollContainerWithoutOverflow) {
3614
+ // Internet Explorer does will consider the scrollable area focusable
3615
+ // if the element is a <div> or a <span> and it is in fact scrollable,
3616
+ // regardless of the CSS overflow property
3617
+ if ((0, _is.isScrollableContainer)(element, nodeName)) {
3618
+ return true;
3619
+ }
3620
+ } else if ((0, _is.hasCssOverflowScroll)(style)) {
3621
+ // Firefox requires proper overflow setting, IE does not necessarily
3622
+ // https://developer.mozilla.org/en-US/docs/Web/CSS/overflow
3623
+ return true;
3624
+ }
3625
+ }
3626
+
3627
+ if (!except.flexbox && supports$1.focusFlexboxContainer && (0, _is.hasCssDisplayFlex)(style)) {
3628
+ // elements with display:flex are focusable in IE10-11
3629
+ return true;
3630
+ }
3631
+
3632
+ var parent = element.parentElement;
3633
+ if (!except.scrollable && parent) {
3634
+ var parentNodeName = parent.nodeName.toLowerCase();
3635
+ var parentStyle = window.getComputedStyle(parent, null);
3636
+ if (supports$1.focusScrollBody && (0, _is.isScrollableContainer)(parent, nodeName, parentNodeName, parentStyle)) {
3637
+ // scrollable bodies are focusable Internet Explorer
3638
+ // https://github.com/medialize/ally.js/issues/21
3639
+ return true;
3640
+ }
3641
+
3642
+ // Children of focusable elements with display:flex are focusable in IE10-11
3643
+ if (supports$1.focusChildrenOfFocusableFlexbox) {
3644
+ if ((0, _is.hasCssDisplayFlex)(parentStyle)) {
3645
+ return true;
3646
+ }
3647
+ }
3648
+ }
3649
+
3650
+ // NOTE: elements marked as inert are not focusable,
3651
+ // but that property is not exposed to the DOM
3652
+ // https://www.w3.org/TR/html5/editing.html#inert
3653
+
3654
+ return false;
3655
+ }
3656
+
3657
+ // bind exceptions to an iterator callback
3658
+ isFocusRelevantRules.except = function () {
3659
+ var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
3660
+
3661
+ var isFocusRelevant = function isFocusRelevant(context) {
3662
+ return isFocusRelevantRules({
3663
+ context: context,
3664
+ except: except
3665
+ });
3666
+ };
3667
+
3668
+ isFocusRelevant.rules = isFocusRelevantRules;
3669
+ return isFocusRelevant;
3670
+ };
3671
+
3672
+ // provide isFocusRelevant(context) as default iterator callback
3673
+ var isFocusRelevant = isFocusRelevantRules.except({});
3674
+ exports.default = isFocusRelevant;
3675
+ module.exports = exports['default'];
3676
+
3677
+ }(focusRelevant, focusRelevant.exports));
3678
+
3679
+ var validArea = {exports: {}};
3680
+
3681
+ var visible = {exports: {}};
3682
+
3683
+ var arrayFindIndex = {exports: {}};
3684
+
3685
+ (function (module, exports) {
3686
+
3687
+ Object.defineProperty(exports, "__esModule", {
3688
+ value: true
3689
+ });
3690
+ exports.default = findIndex;
3691
+ function findIndex(array, callback) {
3692
+ // attempt to use native or polyfilled Array#findIndex first
3693
+ if (array.findIndex) {
3694
+ return array.findIndex(callback);
3695
+ }
3696
+
3697
+ var length = array.length;
3698
+
3699
+ // shortcut if the array is empty
3700
+ if (length === 0) {
3701
+ return -1;
3702
+ }
3703
+
3704
+ // otherwise loop over array
3705
+ for (var i = 0; i < length; i++) {
3706
+ if (callback(array[i], i, array)) {
3707
+ return i;
3708
+ }
3709
+ }
3710
+
3711
+ return -1;
3712
+ }
3713
+ module.exports = exports["default"];
3714
+
3715
+ }(arrayFindIndex, arrayFindIndex.exports));
3716
+
3717
+ var getFrameElement = {exports: {}};
3718
+
3719
+ var getContentDocument = {exports: {}};
3720
+
3721
+ (function (module, exports) {
3722
+
3723
+ Object.defineProperty(exports, "__esModule", {
3724
+ value: true
3725
+ });
3726
+
3727
+ exports.default = function (node) {
3728
+ try {
3729
+ // works on <object> and <iframe>
3730
+ return node.contentDocument
3731
+ // works on <object> and <iframe>
3732
+ || node.contentWindow && node.contentWindow.document
3733
+ // works on <object> and <iframe> that contain SVG
3734
+ || node.getSVGDocument && node.getSVGDocument() || null;
3735
+ } catch (e) {
3736
+ // SecurityError: Failed to read the 'contentDocument' property from 'HTMLObjectElement'
3737
+ // also IE may throw member not found exception e.g. on <object type="image/png">
3738
+ return null;
3739
+ }
3740
+ };
3741
+
3742
+ module.exports = exports["default"];
3743
+
3744
+ }(getContentDocument, getContentDocument.exports));
3745
+
3746
+ var getWindow = {exports: {}};
3747
+
3748
+ var getDocument = {exports: {}};
3749
+
3750
+ (function (module, exports) {
3751
+
3752
+ Object.defineProperty(exports, "__esModule", {
3753
+ value: true
3754
+ });
3755
+
3756
+ exports.default = function (node) {
3757
+ if (!node) {
3758
+ return document;
3759
+ }
3760
+
3761
+ if (node.nodeType === Node.DOCUMENT_NODE) {
3762
+ return node;
3763
+ }
3764
+
3765
+ return node.ownerDocument || document;
3766
+ };
3767
+
3768
+ module.exports = exports["default"];
3769
+
3770
+ }(getDocument, getDocument.exports));
3771
+
3772
+ (function (module, exports) {
3773
+
3774
+ Object.defineProperty(exports, "__esModule", {
3775
+ value: true
3776
+ });
3777
+
3778
+ exports.default = function (node) {
3779
+ var _document = (0, _getDocument2.default)(node);
3780
+ return _document.defaultView || window;
3781
+ };
3782
+
3783
+ var _getDocument = getDocument.exports;
3784
+
3785
+ var _getDocument2 = _interopRequireDefault(_getDocument);
3786
+
3787
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3788
+
3789
+ module.exports = exports['default'];
3790
+
3791
+ }(getWindow, getWindow.exports));
3792
+
3793
+ var selectInShadows = {exports: {}};
3794
+
3795
+ (function (module, exports) {
3796
+
3797
+ Object.defineProperty(exports, "__esModule", {
3798
+ value: true
3799
+ });
3800
+
3801
+ exports.default = function (selector) {
3802
+ if (typeof shadowPrefix !== 'string') {
3803
+ var operator = (0, _cssShadowPiercingDeepCombinator2.default)();
3804
+ if (operator) {
3805
+ shadowPrefix = ', html ' + operator + ' ';
3806
+ }
3807
+ }
3808
+
3809
+ if (!shadowPrefix) {
3810
+ return selector;
3811
+ }
3812
+
3813
+ return selector + shadowPrefix + selector.replace(/\s*,\s*/g, ',').split(',').join(shadowPrefix);
3814
+ };
3815
+
3816
+ var _cssShadowPiercingDeepCombinator = cssShadowPiercingDeepCombinator.exports;
3817
+
3818
+ var _cssShadowPiercingDeepCombinator2 = _interopRequireDefault(_cssShadowPiercingDeepCombinator);
3819
+
3820
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3821
+
3822
+ var shadowPrefix = void 0;
3823
+ // convert a CSS selector so that it also pierces ShadowDOM
3824
+ // takes ".a, #b" and turns it into ".a, #b, html >>> .a, html >>> #b"
3825
+
3826
+ module.exports = exports['default'];
3827
+
3828
+ }(selectInShadows, selectInShadows.exports));
3829
+
3830
+ (function (module, exports) {
3831
+
3832
+ Object.defineProperty(exports, "__esModule", {
3833
+ value: true
3834
+ });
3835
+ exports.default = getFrameElement;
3836
+
3837
+ var _getContentDocument = getContentDocument.exports;
3838
+
3839
+ var _getContentDocument2 = _interopRequireDefault(_getContentDocument);
3840
+
3841
+ var _getWindow = getWindow.exports;
3842
+
3843
+ var _getWindow2 = _interopRequireDefault(_getWindow);
3844
+
3845
+ var _selectInShadows = selectInShadows.exports;
3846
+
3847
+ var _selectInShadows2 = _interopRequireDefault(_selectInShadows);
3848
+
3849
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3850
+
3851
+ var selector = void 0;
3852
+
3853
+ function findDocumentHostElement(_window) {
3854
+ if (!selector) {
3855
+ selector = (0, _selectInShadows2.default)('object, iframe');
3856
+ }
3857
+
3858
+ if (_window._frameElement !== undefined) {
3859
+ return _window._frameElement;
3860
+ }
3861
+
3862
+ _window._frameElement = null;
3863
+
3864
+ var potentialHosts = _window.parent.document.querySelectorAll(selector);
3865
+ [].some.call(potentialHosts, function (element) {
3866
+ var _document = (0, _getContentDocument2.default)(element);
3867
+ if (_document !== _window.document) {
3868
+ return false;
3869
+ }
3870
+
3871
+ _window._frameElement = element;
3872
+ return true;
3873
+ });
3874
+
3875
+ return _window._frameElement;
3876
+ }
3877
+
3878
+ function getFrameElement(element) {
3879
+ var _window = (0, _getWindow2.default)(element);
3880
+ if (!_window.parent || _window.parent === _window) {
3881
+ // if there is no parent browsing context,
3882
+ // we're not going to get a frameElement either way
3883
+ return null;
3884
+ }
3885
+
3886
+ try {
3887
+ // see https://developer.mozilla.org/en-US/docs/Web/API/Window/frameElement
3888
+ // does not work within <embed> anywhere, and not within in <object> in IE
3889
+ return _window.frameElement || findDocumentHostElement(_window);
3890
+ } catch (e) {
3891
+ return null;
3892
+ }
3893
+ }
3894
+ module.exports = exports['default'];
3895
+
3896
+ }(getFrameElement, getFrameElement.exports));
3897
+
3898
+ (function (module, exports) {
3899
+
3900
+ Object.defineProperty(exports, "__esModule", {
3901
+ value: true
3902
+ });
3903
+
3904
+ var _arrayFindIndex = arrayFindIndex.exports;
3905
+
3906
+ var _arrayFindIndex2 = _interopRequireDefault(_arrayFindIndex);
3907
+
3908
+ var _parents = parents.exports;
3909
+
3910
+ var _parents2 = _interopRequireDefault(_parents);
3911
+
3912
+ var _contextToElement = contextToElement.exports;
3913
+
3914
+ var _contextToElement2 = _interopRequireDefault(_contextToElement);
3915
+
3916
+ var _getFrameElement = getFrameElement.exports;
3917
+
3918
+ var _getFrameElement2 = _interopRequireDefault(_getFrameElement);
3919
+
3920
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3921
+
3922
+ // https://www.w3.org/TR/html5/rendering.html#being-rendered
3923
+ // <area> is not rendered, but we *consider* it visible to simplfiy this function's usage
3924
+
3925
+ // determine if an element is rendered
3926
+ // NOTE: that does not mean an element is visible in the viewport, see util/visible-area
3927
+
3928
+ var notRenderedElementsPattern = /^(area)$/;
3929
+
3930
+ function computedStyle(element, property) {
3931
+ return window.getComputedStyle(element, null).getPropertyValue(property);
3932
+ }
3933
+
3934
+ function notDisplayed(_path) {
3935
+ return _path.some(function (element) {
3936
+ // display:none is not visible (optimized away at layout)
3937
+ return computedStyle(element, 'display') === 'none';
3938
+ });
3939
+ }
3940
+
3941
+ function notVisible(_path) {
3942
+ // https://github.com/jquery/jquery-ui/blob/master/ui/core.js#L109-L114
3943
+ // NOTE: a nested element can reverse visibility:hidden|collapse by explicitly setting visibility:visible
3944
+ // NOTE: visibility can be ["", "visible", "hidden", "collapse"]
3945
+ var hidden = (0, _arrayFindIndex2.default)(_path, function (element) {
3946
+ var visibility = computedStyle(element, 'visibility');
3947
+ return visibility === 'hidden' || visibility === 'collapse';
3948
+ });
3949
+
3950
+ if (hidden === -1) {
3951
+ // there is no hidden element
3952
+ return false;
3953
+ }
3954
+
3955
+ var visible = (0, _arrayFindIndex2.default)(_path, function (element) {
3956
+ return computedStyle(element, 'visibility') === 'visible';
3957
+ });
3958
+
3959
+ if (visible === -1) {
3960
+ // there is no visible element (but a hidden element)
3961
+ return true;
3962
+ }
3963
+
3964
+ if (hidden < visible) {
3965
+ // there is a hidden element and it's closer than the first visible element
3966
+ return true;
3967
+ }
3968
+
3969
+ // there may be a hidden element, but the closest element is visible
3970
+ return false;
3971
+ }
3972
+
3973
+ function collapsedParent(_path) {
3974
+ var offset = 1;
3975
+ if (_path[0].nodeName.toLowerCase() === 'summary') {
3976
+ offset = 2;
3977
+ }
3978
+
3979
+ return _path.slice(offset).some(function (element) {
3980
+ // "content children" of a closed details element are not visible
3981
+ return element.nodeName.toLowerCase() === 'details' && element.open === false;
3982
+ });
3983
+ }
3984
+
3985
+ function isVisibleRules() {
3986
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
3987
+ context = _ref.context,
3988
+ _ref$except = _ref.except,
3989
+ except = _ref$except === undefined ? {
3990
+ notRendered: false,
3991
+ cssDisplay: false,
3992
+ cssVisibility: false,
3993
+ detailsElement: false,
3994
+ browsingContext: false
3995
+ } : _ref$except;
3996
+
3997
+ var element = (0, _contextToElement2.default)({
3998
+ label: 'is/visible',
3999
+ resolveDocument: true,
4000
+ context: context
4001
+ });
4002
+
4003
+ var nodeName = element.nodeName.toLowerCase();
4004
+ if (!except.notRendered && notRenderedElementsPattern.test(nodeName)) {
4005
+ return true;
4006
+ }
4007
+
4008
+ var _path = (0, _parents2.default)({ context: element });
4009
+
4010
+ // in Internet Explorer <audio> has a default display: none, where others have display: inline
4011
+ // but IE allows focusing <audio style="display:none">, but not <div display:none><audio>
4012
+ // this is irrelevant to other browsers, as the controls attribute is required to make <audio> focusable
4013
+ var isAudioWithoutControls = nodeName === 'audio' && !element.hasAttribute('controls');
4014
+ if (!except.cssDisplay && notDisplayed(isAudioWithoutControls ? _path.slice(1) : _path)) {
4015
+ return false;
4016
+ }
4017
+
4018
+ if (!except.cssVisibility && notVisible(_path)) {
4019
+ return false;
4020
+ }
4021
+
4022
+ if (!except.detailsElement && collapsedParent(_path)) {
4023
+ return false;
4024
+ }
4025
+
4026
+ if (!except.browsingContext) {
4027
+ // elements within a browsing context are affected by the
4028
+ // browsing context host element's visibility and tabindex
4029
+ var frameElement = (0, _getFrameElement2.default)(element);
4030
+ var _isVisible = isVisibleRules.except(except);
4031
+ if (frameElement && !_isVisible(frameElement)) {
4032
+ return false;
4033
+ }
4034
+ }
4035
+
4036
+ return true;
4037
+ }
4038
+
4039
+ // bind exceptions to an iterator callback
4040
+ isVisibleRules.except = function () {
4041
+ var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4042
+
4043
+ var isVisible = function isVisible(context) {
4044
+ return isVisibleRules({
4045
+ context: context,
4046
+ except: except
4047
+ });
4048
+ };
4049
+
4050
+ isVisible.rules = isVisibleRules;
4051
+ return isVisible;
4052
+ };
4053
+
4054
+ // provide isVisible(context) as default iterator callback
4055
+ var isVisible = isVisibleRules.except({});
4056
+ exports.default = isVisible;
4057
+ module.exports = exports['default'];
4058
+
4059
+ }(visible, visible.exports));
4060
+
4061
+ var imageMap = {};
4062
+
4063
+ var css_escape = {exports: {}};
4064
+
4065
+ /*! https://mths.be/cssescape v1.5.1 by @mathias | MIT license */
4066
+
4067
+ (function (module, exports) {
4068
+ (function(root, factory) {
4069
+ // https://github.com/umdjs/umd/blob/master/returnExports.js
4070
+ {
4071
+ // For Node.js.
4072
+ module.exports = factory(root);
4073
+ }
4074
+ }(typeof commonjsGlobal != 'undefined' ? commonjsGlobal : commonjsGlobal, function(root) {
4075
+
4076
+ if (root.CSS && root.CSS.escape) {
4077
+ return root.CSS.escape;
4078
+ }
4079
+
4080
+ // https://drafts.csswg.org/cssom/#serialize-an-identifier
4081
+ var cssEscape = function(value) {
4082
+ if (arguments.length == 0) {
4083
+ throw new TypeError('`CSS.escape` requires an argument.');
4084
+ }
4085
+ var string = String(value);
4086
+ var length = string.length;
4087
+ var index = -1;
4088
+ var codeUnit;
4089
+ var result = '';
4090
+ var firstCodeUnit = string.charCodeAt(0);
4091
+ while (++index < length) {
4092
+ codeUnit = string.charCodeAt(index);
4093
+ // Note: there’s no need to special-case astral symbols, surrogate
4094
+ // pairs, or lone surrogates.
4095
+
4096
+ // If the character is NULL (U+0000), then the REPLACEMENT CHARACTER
4097
+ // (U+FFFD).
4098
+ if (codeUnit == 0x0000) {
4099
+ result += '\uFFFD';
4100
+ continue;
4101
+ }
4102
+
4103
+ if (
4104
+ // If the character is in the range [\1-\1F] (U+0001 to U+001F) or is
4105
+ // U+007F, […]
4106
+ (codeUnit >= 0x0001 && codeUnit <= 0x001F) || codeUnit == 0x007F ||
4107
+ // If the character is the first character and is in the range [0-9]
4108
+ // (U+0030 to U+0039), […]
4109
+ (index == 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||
4110
+ // If the character is the second character and is in the range [0-9]
4111
+ // (U+0030 to U+0039) and the first character is a `-` (U+002D), […]
4112
+ (
4113
+ index == 1 &&
4114
+ codeUnit >= 0x0030 && codeUnit <= 0x0039 &&
4115
+ firstCodeUnit == 0x002D
4116
+ )
4117
+ ) {
4118
+ // https://drafts.csswg.org/cssom/#escape-a-character-as-code-point
4119
+ result += '\\' + codeUnit.toString(16) + ' ';
4120
+ continue;
4121
+ }
4122
+
4123
+ if (
4124
+ // If the character is the first character and is a `-` (U+002D), and
4125
+ // there is no second character, […]
4126
+ index == 0 &&
4127
+ length == 1 &&
4128
+ codeUnit == 0x002D
4129
+ ) {
4130
+ result += '\\' + string.charAt(index);
4131
+ continue;
4132
+ }
4133
+
4134
+ // If the character is not handled by one of the above rules and is
4135
+ // greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or
4136
+ // is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to
4137
+ // U+005A), or [a-z] (U+0061 to U+007A), […]
4138
+ if (
4139
+ codeUnit >= 0x0080 ||
4140
+ codeUnit == 0x002D ||
4141
+ codeUnit == 0x005F ||
4142
+ codeUnit >= 0x0030 && codeUnit <= 0x0039 ||
4143
+ codeUnit >= 0x0041 && codeUnit <= 0x005A ||
4144
+ codeUnit >= 0x0061 && codeUnit <= 0x007A
4145
+ ) {
4146
+ // the character itself
4147
+ result += string.charAt(index);
4148
+ continue;
4149
+ }
4150
+
4151
+ // Otherwise, the escaped character.
4152
+ // https://drafts.csswg.org/cssom/#escape-a-character
4153
+ result += '\\' + string.charAt(index);
4154
+
4155
+ }
4156
+ return result;
4157
+ };
4158
+
4159
+ if (!root.CSS) {
4160
+ root.CSS = {};
4161
+ }
4162
+
4163
+ root.CSS.escape = cssEscape;
4164
+ return cssEscape;
4165
+
4166
+ }));
4167
+ }(css_escape));
4168
+
4169
+ Object.defineProperty(imageMap, "__esModule", {
4170
+ value: true
4171
+ });
4172
+ imageMap.getMapByName = getMapByName;
4173
+ imageMap.getMapOfImage = getMapOfImage;
4174
+ imageMap.getImageOfArea = getImageOfArea;
4175
+
4176
+ var _css = css_escape.exports;
4177
+
4178
+ var _css2 = _interopRequireDefault(_css);
4179
+
4180
+ var _getDocument = getDocument.exports;
4181
+
4182
+ var _getDocument2 = _interopRequireDefault(_getDocument);
4183
+
4184
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4185
+
4186
+ function getMapByName(name, _document) {
4187
+ // apparently getElementsByName() also considers id attribute in IE & opera
4188
+ // https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByName
4189
+ var map = _document.querySelector('map[name="' + (0, _css2.default)(name) + '"]');
4190
+ return map || null;
4191
+ }
4192
+
4193
+ function getMapOfImage(element) {
4194
+ var usemap = element.getAttribute('usemap');
4195
+ if (!usemap) {
4196
+ return null;
4197
+ }
4198
+
4199
+ var _document = (0, _getDocument2.default)(element);
4200
+ return getMapByName(usemap.slice(1), _document);
4201
+ }
4202
+
4203
+ function getImageOfArea(element) {
4204
+ var map = element.parentElement;
4205
+
4206
+ if (!map.name || map.nodeName.toLowerCase() !== 'map') {
4207
+ return null;
4208
+ }
4209
+
4210
+ // NOTE: image maps can also be applied to <object> with image content,
4211
+ // but no browser supports this at the moment
4212
+
4213
+ // HTML5 specifies HTMLMapElement.images to be an HTMLCollection of all
4214
+ // <img> and <object> referencing the <map> element, but no browser implements this
4215
+ // https://www.w3.org/TR/html5/embedded-content-0.html#the-map-element
4216
+ // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMapElement
4217
+ // the image must be valid and loaded for the map to take effect
4218
+ var _document = (0, _getDocument2.default)(element);
4219
+ return _document.querySelector('img[usemap="#' + (0, _css2.default)(map.name) + '"]') || null;
4220
+ }
4221
+
4222
+ (function (module, exports) {
4223
+
4224
+ Object.defineProperty(exports, "__esModule", {
4225
+ value: true
4226
+ });
4227
+
4228
+ exports.default = function (context) {
4229
+ if (!supports$1) {
4230
+ supports$1 = (0, _supports3.default)();
4231
+ }
4232
+
4233
+ var element = (0, _contextToElement2.default)({
4234
+ label: 'is/valid-area',
4235
+ context: context
4236
+ });
4237
+
4238
+ var nodeName = element.nodeName.toLowerCase();
4239
+ if (nodeName !== 'area') {
4240
+ return false;
4241
+ }
4242
+
4243
+ var hasTabindex = element.hasAttribute('tabindex');
4244
+ if (!supports$1.focusAreaTabindex && hasTabindex) {
4245
+ // Blink and WebKit do not consider <area tabindex="-1" href="#void"> focusable
4246
+ return false;
4247
+ }
4248
+
4249
+ var img = (0, _imageMap.getImageOfArea)(element);
4250
+ if (!img || !(0, _visible2.default)(img)) {
4251
+ return false;
4252
+ }
4253
+
4254
+ // Firefox only allows fully loaded images to reference image maps
4255
+ // https://stereochro.me/ideas/detecting-broken-images-js
4256
+ if (!supports$1.focusBrokenImageMap && (!img.complete || !img.naturalHeight || img.offsetWidth <= 0 || img.offsetHeight <= 0)) {
4257
+ return false;
4258
+ }
4259
+
4260
+ // Firefox supports.can focus area elements even if they don't have an href attribute
4261
+ if (!supports$1.focusAreaWithoutHref && !element.href) {
4262
+ // Internet explorer supports.can focus area elements without href if either
4263
+ // the area element or the image element has a tabindex attribute
4264
+ return supports$1.focusAreaTabindex && hasTabindex || supports$1.focusAreaImgTabindex && img.hasAttribute('tabindex');
4265
+ }
4266
+
4267
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-usemap
4268
+ var childOfInteractive = (0, _parents2.default)({ context: img }).slice(1).some(function (_element) {
4269
+ var name = _element.nodeName.toLowerCase();
4270
+ return name === 'button' || name === 'a';
4271
+ });
4272
+
4273
+ if (childOfInteractive) {
4274
+ return false;
4275
+ }
4276
+
4277
+ return true;
4278
+ };
4279
+
4280
+ var _contextToElement = contextToElement.exports;
4281
+
4282
+ var _contextToElement2 = _interopRequireDefault(_contextToElement);
4283
+
4284
+ var _visible = visible.exports;
4285
+
4286
+ var _visible2 = _interopRequireDefault(_visible);
4287
+
4288
+ var _parents = parents.exports;
4289
+
4290
+ var _parents2 = _interopRequireDefault(_parents);
4291
+
4292
+ var _imageMap = imageMap;
4293
+
4294
+ var _supports2 = supports.exports;
4295
+
4296
+ var _supports3 = _interopRequireDefault(_supports2);
4297
+
4298
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4299
+
4300
+ var supports$1 = void 0;
4301
+
4302
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/map
4303
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-usemap
4304
+ // https://github.com/jquery/jquery-ui/blob/master/ui/core.js#L88-L107
4305
+
4306
+ // determine if an <area> element is being properly used by and <img> via a <map>
4307
+
4308
+ module.exports = exports['default'];
4309
+
4310
+ }(validArea, validArea.exports));
4311
+
4312
+ var disabled = {exports: {}};
4313
+
4314
+ var nativeDisabledSupported = {exports: {}};
4315
+
4316
+ (function (module, exports) {
4317
+
4318
+ Object.defineProperty(exports, "__esModule", {
4319
+ value: true
4320
+ });
4321
+
4322
+ exports.default = function (context) {
4323
+ if (!supports$1) {
4324
+ supports$1 = (0, _supports3.default)();
4325
+
4326
+ if (supports$1.focusFieldsetDisabled) {
4327
+ delete disabledElements.fieldset;
4328
+ }
4329
+
4330
+ if (supports$1.focusFormDisabled) {
4331
+ delete disabledElements.form;
4332
+ }
4333
+
4334
+ disabledElementsPattern = new RegExp('^(' + Object.keys(disabledElements).join('|') + ')$');
4335
+ }
4336
+
4337
+ var element = (0, _contextToElement2.default)({
4338
+ label: 'is/native-disabled-supported',
4339
+ context: context
4340
+ });
4341
+
4342
+ var nodeName = element.nodeName.toLowerCase();
4343
+ return Boolean(disabledElementsPattern.test(nodeName));
4344
+ };
4345
+
4346
+ var _contextToElement = contextToElement.exports;
4347
+
4348
+ var _contextToElement2 = _interopRequireDefault(_contextToElement);
4349
+
4350
+ var _supports2 = supports.exports;
4351
+
4352
+ var _supports3 = _interopRequireDefault(_supports2);
4353
+
4354
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4355
+
4356
+ // Determine if an element supports the disabled attribute
4357
+
4358
+ var supports$1 = void 0;
4359
+
4360
+ // https://www.w3.org/TR/html5/disabled-elements.html#concept-element-disabled
4361
+ var disabledElementsPattern = void 0;
4362
+ var disabledElements = {
4363
+ input: true,
4364
+ select: true,
4365
+ textarea: true,
4366
+ button: true,
4367
+ fieldset: true,
4368
+ form: true
4369
+ };
4370
+
4371
+ module.exports = exports['default'];
4372
+
4373
+ }(nativeDisabledSupported, nativeDisabledSupported.exports));
4374
+
4375
+ (function (module, exports) {
4376
+
4377
+ Object.defineProperty(exports, "__esModule", {
4378
+ value: true
4379
+ });
4380
+
4381
+ exports.default = function (context) {
4382
+ if (!supports$1) {
4383
+ supports$1 = (0, _supports3.default)();
4384
+ }
4385
+
4386
+ var element = (0, _contextToElement2.default)({
4387
+ label: 'is/disabled',
4388
+ context: context
4389
+ });
4390
+
4391
+ if (element.hasAttribute('data-ally-disabled')) {
4392
+ // treat ally's element/disabled like the DOM native element.disabled
4393
+ return true;
4394
+ }
4395
+
4396
+ if (!(0, _nativeDisabledSupported2.default)(element)) {
4397
+ // non-form elements do not support the disabled attribute
4398
+ return false;
4399
+ }
4400
+
4401
+ if (element.disabled) {
4402
+ // the element itself is disabled
4403
+ return true;
4404
+ }
4405
+
4406
+ var parents = (0, _parents2.default)({ context: element });
4407
+ if (parents.some(isDisabledFieldset)) {
4408
+ // a parental <fieldset> is disabld and inherits the state onto this element
4409
+ return true;
4410
+ }
4411
+
4412
+ if (!supports$1.focusFormDisabled && parents.some(isDisabledForm)) {
4413
+ // a parental <form> is disabld and inherits the state onto this element
4414
+ return true;
4415
+ }
4416
+
4417
+ return false;
4418
+ };
4419
+
4420
+ var _contextToElement = contextToElement.exports;
4421
+
4422
+ var _contextToElement2 = _interopRequireDefault(_contextToElement);
4423
+
4424
+ var _parents = parents.exports;
4425
+
4426
+ var _parents2 = _interopRequireDefault(_parents);
4427
+
4428
+ var _nativeDisabledSupported = nativeDisabledSupported.exports;
4429
+
4430
+ var _nativeDisabledSupported2 = _interopRequireDefault(_nativeDisabledSupported);
4431
+
4432
+ var _supports2 = supports.exports;
4433
+
4434
+ var _supports3 = _interopRequireDefault(_supports2);
4435
+
4436
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4437
+
4438
+ // Determine if an element is disabled (i.e. not editable)
4439
+
4440
+ var supports$1 = void 0;
4441
+
4442
+ function isDisabledFieldset(element) {
4443
+ var nodeName = element.nodeName.toLowerCase();
4444
+ return nodeName === 'fieldset' && element.disabled;
4445
+ }
4446
+
4447
+ function isDisabledForm(element) {
4448
+ var nodeName = element.nodeName.toLowerCase();
4449
+ return nodeName === 'form' && element.disabled;
4450
+ }
4451
+
4452
+ module.exports = exports['default'];
4453
+
4454
+ }(disabled, disabled.exports));
4455
+
4456
+ var onlyTabbable = {exports: {}};
4457
+
4458
+ (function (module, exports) {
4459
+
4460
+ Object.defineProperty(exports, "__esModule", {
4461
+ value: true
4462
+ });
4463
+
4464
+ var _visible = visible.exports;
4465
+
4466
+ var _visible2 = _interopRequireDefault(_visible);
4467
+
4468
+ var _contextToElement = contextToElement.exports;
4469
+
4470
+ var _contextToElement2 = _interopRequireDefault(_contextToElement);
4471
+
4472
+ var _getFrameElement = getFrameElement.exports;
4473
+
4474
+ var _getFrameElement2 = _interopRequireDefault(_getFrameElement);
4475
+
4476
+ var _tabindexValue = tabindexValue.exports;
4477
+
4478
+ var _tabindexValue2 = _interopRequireDefault(_tabindexValue);
4479
+
4480
+ var _platform = platform$1.exports;
4481
+
4482
+ var _platform2 = _interopRequireDefault(_platform);
4483
+
4484
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4485
+
4486
+ function isOnlyTabbableRules() {
4487
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
4488
+ context = _ref.context,
4489
+ _ref$except = _ref.except,
4490
+ except = _ref$except === undefined ? {
4491
+ onlyFocusableBrowsingContext: false,
4492
+ visible: false
4493
+ } : _ref$except;
4494
+
4495
+ var element = (0, _contextToElement2.default)({
4496
+ label: 'is/only-tabbable',
4497
+ resolveDocument: true,
4498
+ context: context
4499
+ });
4500
+
4501
+ if (!except.visible && !(0, _visible2.default)(element)) {
4502
+ return false;
4503
+ }
4504
+
4505
+ if (!except.onlyFocusableBrowsingContext && (_platform2.default.is.GECKO || _platform2.default.is.TRIDENT || _platform2.default.is.EDGE)) {
4506
+ var frameElement = (0, _getFrameElement2.default)(element);
4507
+ if (frameElement) {
4508
+ if ((0, _tabindexValue2.default)(frameElement) < 0) {
4509
+ // iframe[tabindex="-1"] and object[tabindex="-1"] inherit the
4510
+ // tabbable demotion onto elements of their browsing contexts
4511
+ return false;
4512
+ }
4513
+ }
4514
+ }
4515
+
4516
+ var nodeName = element.nodeName.toLowerCase();
4517
+ var tabindex = (0, _tabindexValue2.default)(element);
4518
+
4519
+ if (nodeName === 'label' && _platform2.default.is.GECKO) {
4520
+ // Firefox cannot focus, but tab to: label[tabindex=0]
4521
+ return tabindex !== null && tabindex >= 0;
4522
+ }
4523
+
4524
+ // SVG Elements were keyboard focusable but not script focusable before Firefox 51.
4525
+ // Firefox 51 added the focus management DOM API (.focus and .blur) to SVGElement,
4526
+ // see https://bugzilla.mozilla.org/show_bug.cgi?id=778654
4527
+ if (_platform2.default.is.GECKO && element.ownerSVGElement && !element.focus) {
4528
+ if (nodeName === 'a' && element.hasAttribute('xlink:href')) {
4529
+ // any focusable child of <svg> cannot be focused, but tabbed to
4530
+ if (_platform2.default.is.GECKO) {
4531
+ return true;
4532
+ }
4533
+ }
4534
+ }
4535
+
4536
+ return false;
4537
+ }
4538
+
4539
+ // bind exceptions to an iterator callback
4540
+ isOnlyTabbableRules.except = function () {
4541
+ var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4542
+
4543
+ var isOnlyTabbable = function isOnlyTabbable(context) {
4544
+ return isOnlyTabbableRules({
4545
+ context: context,
4546
+ except: except
4547
+ });
4548
+ };
4549
+
4550
+ isOnlyTabbable.rules = isOnlyTabbableRules;
4551
+ return isOnlyTabbable;
4552
+ };
4553
+
4554
+ // provide isOnlyTabbable(context) as default iterator callback
4555
+ var isOnlyTabbable = isOnlyTabbableRules.except({});
4556
+ exports.default = isOnlyTabbable;
4557
+ module.exports = exports['default'];
4558
+
4559
+ }(onlyTabbable, onlyTabbable.exports));
4560
+
4561
+ (function (module, exports) {
4562
+
4563
+ Object.defineProperty(exports, "__esModule", {
4564
+ value: true
4565
+ });
4566
+
4567
+ var _focusRelevant = focusRelevant.exports;
4568
+
4569
+ var _focusRelevant2 = _interopRequireDefault(_focusRelevant);
4570
+
4571
+ var _validArea = validArea.exports;
4572
+
4573
+ var _validArea2 = _interopRequireDefault(_validArea);
4574
+
4575
+ var _visible = visible.exports;
4576
+
4577
+ var _visible2 = _interopRequireDefault(_visible);
4578
+
4579
+ var _disabled = disabled.exports;
4580
+
4581
+ var _disabled2 = _interopRequireDefault(_disabled);
4582
+
4583
+ var _onlyTabbable = onlyTabbable.exports;
4584
+
4585
+ var _onlyTabbable2 = _interopRequireDefault(_onlyTabbable);
4586
+
4587
+ var _contextToElement = contextToElement.exports;
4588
+
4589
+ var _contextToElement2 = _interopRequireDefault(_contextToElement);
4590
+
4591
+ var _getFrameElement = getFrameElement.exports;
4592
+
4593
+ var _getFrameElement2 = _interopRequireDefault(_getFrameElement);
4594
+
4595
+ var _tabindexValue = tabindexValue.exports;
4596
+
4597
+ var _tabindexValue2 = _interopRequireDefault(_tabindexValue);
4598
+
4599
+ var _supports2 = supports.exports;
4600
+
4601
+ var _supports3 = _interopRequireDefault(_supports2);
4602
+
4603
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4604
+
4605
+ var supports$1 = void 0;
4606
+ // determine if an element can be focused
4607
+
4608
+ // https://www.w3.org/TR/html5/editing.html#focus-management
4609
+
4610
+ // NOTE: The following known issues exist:
4611
+ // Gecko: `svg a[xlink|href]` is not identified as focusable (because SVGElement.prototype.focus is missing)
4612
+ // Blink, WebKit: SVGElements that have been made focusable by adding a focus event listener are not identified as focusable
4613
+
4614
+ function isOnlyFocusRelevant(element) {
4615
+ var nodeName = element.nodeName.toLowerCase();
4616
+ if (nodeName === 'embed' || nodeName === 'keygen') {
4617
+ // embed is considered focus-relevant but not focusable
4618
+ // see https://github.com/medialize/ally.js/issues/82
4619
+ return true;
4620
+ }
4621
+
4622
+ var _tabindex = (0, _tabindexValue2.default)(element);
4623
+ if (element.shadowRoot && _tabindex === null) {
4624
+ // ShadowDOM host elements *may* receive focus
4625
+ // even though they are not considered focuable
4626
+ return true;
4627
+ }
4628
+
4629
+ if (nodeName === 'label') {
4630
+ // <label tabindex="0"> is only tabbable in Firefox, not script-focusable
4631
+ // there's no way to make an element focusable other than by adding a tabindex,
4632
+ // and focus behavior of the label element seems hard-wired to ignore tabindex
4633
+ // in some browsers (like Gecko, Blink and WebKit)
4634
+ return !supports$1.focusLabelTabindex || _tabindex === null;
4635
+ }
4636
+
4637
+ if (nodeName === 'legend') {
4638
+ return _tabindex === null;
4639
+ }
4640
+
4641
+ if (supports$1.focusSvgFocusableAttribute && (element.ownerSVGElement || nodeName === 'svg')) {
4642
+ // Internet Explorer understands the focusable attribute introduced in SVG Tiny 1.2
4643
+ var focusableAttribute = element.getAttribute('focusable');
4644
+ return focusableAttribute && focusableAttribute === 'false';
4645
+ }
4646
+
4647
+ if (nodeName === 'img' && element.hasAttribute('usemap')) {
4648
+ // Gecko, Trident and Edge do not allow an image with an image map and tabindex to be focused,
4649
+ // it appears the tabindex is overruled so focus is still forwarded to the <map>
4650
+ return _tabindex === null || !supports$1.focusImgUsemapTabindex;
4651
+ }
4652
+
4653
+ if (nodeName === 'area') {
4654
+ // all <area>s are considered relevant,
4655
+ // but only the valid <area>s are focusable
4656
+ return !(0, _validArea2.default)(element);
4657
+ }
4658
+
4659
+ return false;
4660
+ }
4661
+
4662
+ function isFocusableRules() {
4663
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
4664
+ context = _ref.context,
4665
+ _ref$except = _ref.except,
4666
+ except = _ref$except === undefined ? {
4667
+ disabled: false,
4668
+ visible: false,
4669
+ onlyTabbable: false
4670
+ } : _ref$except;
4671
+
4672
+ if (!supports$1) {
4673
+ supports$1 = (0, _supports3.default)();
4674
+ }
4675
+
4676
+ var _isOnlyTabbable = _onlyTabbable2.default.rules.except({
4677
+ onlyFocusableBrowsingContext: true,
4678
+ visible: except.visible
4679
+ });
4680
+
4681
+ var element = (0, _contextToElement2.default)({
4682
+ label: 'is/focusable',
4683
+ resolveDocument: true,
4684
+ context: context
4685
+ });
4686
+
4687
+ var focusRelevant = _focusRelevant2.default.rules({
4688
+ context: element,
4689
+ except: except
4690
+ });
4691
+
4692
+ if (!focusRelevant || isOnlyFocusRelevant(element)) {
4693
+ return false;
4694
+ }
4695
+
4696
+ if (!except.disabled && (0, _disabled2.default)(element)) {
4697
+ return false;
4698
+ }
4699
+
4700
+ if (!except.onlyTabbable && _isOnlyTabbable(element)) {
4701
+ // some elements may be keyboard focusable, but not script focusable
4702
+ return false;
4703
+ }
4704
+
4705
+ // elements that are not rendered, cannot be focused
4706
+ if (!except.visible) {
4707
+ var visibilityOptions = {
4708
+ context: element,
4709
+ except: {}
4710
+ };
4711
+
4712
+ if (supports$1.focusInHiddenIframe) {
4713
+ // WebKit and Blink can focus content in hidden <iframe> and <object>
4714
+ visibilityOptions.except.browsingContext = true;
4715
+ }
4716
+
4717
+ if (supports$1.focusObjectSvgHidden) {
4718
+ // Blink allows focusing the object element, even if it has visibility: hidden;
4719
+ // @browser-issue Blink https://code.google.com/p/chromium/issues/detail?id=586191
4720
+ var _nodeName2 = element.nodeName.toLowerCase();
4721
+ if (_nodeName2 === 'object') {
4722
+ visibilityOptions.except.cssVisibility = true;
4723
+ }
4724
+ }
4725
+
4726
+ if (!_visible2.default.rules(visibilityOptions)) {
4727
+ return false;
4728
+ }
4729
+ }
4730
+
4731
+ var frameElement = (0, _getFrameElement2.default)(element);
4732
+ if (frameElement) {
4733
+ var _nodeName = frameElement.nodeName.toLowerCase();
4734
+ if (_nodeName === 'object' && !supports$1.focusInZeroDimensionObject) {
4735
+ if (!frameElement.offsetWidth || !frameElement.offsetHeight) {
4736
+ // WebKit can not focus content in <object> if it doesn't have dimensions
4737
+ return false;
4738
+ }
4739
+ }
4740
+ }
4741
+
4742
+ var nodeName = element.nodeName.toLowerCase();
4743
+ if (nodeName === 'svg' && supports$1.focusSvgInIframe && !frameElement && element.getAttribute('tabindex') === null) {
4744
+ return false;
4745
+ }
4746
+
4747
+ return true;
4748
+ }
4749
+
4750
+ // bind exceptions to an iterator callback
4751
+ isFocusableRules.except = function () {
4752
+ var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4753
+
4754
+ var isFocusable = function isFocusable(context) {
4755
+ return isFocusableRules({
4756
+ context: context,
4757
+ except: except
4758
+ });
4759
+ };
4760
+
4761
+ isFocusable.rules = isFocusableRules;
4762
+ return isFocusable;
4763
+ };
4764
+
4765
+ // provide isFocusRelevant(context) as default iterator callback
4766
+ var isFocusable = isFocusableRules.except({});
4767
+ exports.default = isFocusable;
4768
+ module.exports = exports['default'];
4769
+
4770
+ }(focusable, focusable.exports));
4771
+
4772
+ const isFocusable = /*@__PURE__*/getDefaultExportFromCjs(focusable.exports);
4773
+
4774
+ const postTooltipTriggerCss = "post-tooltip-trigger{vertical-align:top}";
4775
+ const PostTooltipTriggerStyle0 = postTooltipTriggerCss;
4776
+
4777
+ const TRIGGER_EVENTS = ['pointerenter', 'pointerleave', 'focusin', 'focusout', 'long-press'];
4778
+ const PostTooltipTrigger = /*@__PURE__*/ proxyCustomElement(class PostTooltipTrigger extends HTMLElement$1 {
4779
+ constructor() {
4780
+ super();
4781
+ this.__registerHost();
4782
+ this.__attachShadow();
4783
+ /**
4784
+ * Reference to the element inside the host that will act as the trigger.
4785
+ */
4786
+ this.trigger = null;
4787
+ /**
4788
+ * Timeout ID for the delay.
4789
+ */
4790
+ this.delayTimeout = null;
4791
+ this.for = undefined;
4792
+ this.delay = 0;
4793
+ this.boundTriggerHandler = this.handleTriggerEvent.bind(this);
4794
+ this.boundTooltipHandler = this.handleTooltipEvent.bind(this);
4795
+ }
4796
+ validateControlFor() {
4797
+ checkType(this.for, // The actual property value
4798
+ 'string', // The expected type
4799
+ 'The "for" property must be a string' // A meaningful error message
4800
+ );
4801
+ }
4802
+ get tooltip() {
4803
+ const ref = document.getElementById(this.for);
4804
+ return (ref === null || ref === void 0 ? void 0 : ref.localName) === 'post-tooltip'
4805
+ ? ref
4806
+ : null;
4807
+ }
4808
+ componentDidLoad() {
4809
+ this.setupTrigger();
4810
+ this.attachListeners();
4811
+ this.attachTooltipListeners();
4812
+ }
4813
+ disconnectedCallback() {
4814
+ this.removeListeners();
4815
+ this.removeTooltipListeners();
4816
+ this.cleanupTrigger();
4817
+ if (this.delayTimeout) {
4818
+ clearTimeout(this.delayTimeout);
4819
+ this.delayTimeout = null;
4820
+ }
4821
+ }
4822
+ handleSlotChange() {
4823
+ this.cleanupTrigger();
4824
+ this.setupTrigger();
4825
+ }
4826
+ cleanupTrigger() {
4827
+ if (this.trigger) {
4828
+ const describedBy = this.trigger.getAttribute('aria-describedby') || '';
4829
+ if (describedBy.includes(this.for)) {
4830
+ const newDescribedBy = describedBy
4831
+ .split(' ')
4832
+ .filter(id => id !== this.for)
4833
+ .join(' ');
4834
+ if (newDescribedBy) {
4835
+ this.trigger.setAttribute('aria-describedby', newDescribedBy);
4836
+ }
4837
+ else {
4838
+ this.trigger.removeAttribute('aria-describedby');
4839
+ }
4840
+ }
4841
+ this.trigger = null;
4842
+ }
4843
+ }
4844
+ setupTrigger() {
4845
+ this.trigger = this.host.querySelector('*');
4846
+ if (this.trigger) {
4847
+ if (!isFocusable(this.trigger)) {
4848
+ this.trigger.setAttribute('tabindex', '0');
4849
+ }
4850
+ const describedBy = this.trigger.getAttribute('aria-describedby') || '';
4851
+ if (!describedBy.includes(this.for)) {
4852
+ this.trigger.setAttribute('aria-describedby', `${describedBy} ${this.for}`.trim());
4853
+ }
4854
+ }
4855
+ else {
4856
+ console.warn('No content found in the post-tooltip-trigger slot. Please insert a focusable element or content that can receive focus.');
4857
+ }
4858
+ }
4859
+ attachListeners() {
4860
+ TRIGGER_EVENTS.forEach(event => {
4861
+ this.host.addEventListener(event, this.boundTriggerHandler);
4862
+ });
4863
+ }
4864
+ removeListeners() {
4865
+ TRIGGER_EVENTS.forEach(event => {
4866
+ this.host.removeEventListener(event, this.boundTriggerHandler);
4867
+ });
4868
+ }
4869
+ attachTooltipListeners() {
4870
+ if (this.tooltip) {
4871
+ this.tooltip.addEventListener('pointerenter', this.boundTooltipHandler);
4872
+ this.tooltip.addEventListener('pointerleave', this.boundTooltipHandler);
4873
+ }
4874
+ }
4875
+ removeTooltipListeners() {
4876
+ if (this.tooltip) {
4877
+ this.tooltip.removeEventListener('pointerenter', this.boundTooltipHandler);
4878
+ this.tooltip.removeEventListener('pointerleave', this.boundTooltipHandler);
4879
+ }
4880
+ }
4881
+ handleTriggerEvent(event) {
4882
+ switch (event.type) {
4883
+ case 'pointerenter':
4884
+ case 'focusin':
4885
+ case 'long-press':
4886
+ this.handleEnter();
4887
+ break;
4888
+ case 'pointerleave':
4889
+ case 'focusout':
4890
+ this.handleLeave(event);
4891
+ break;
4892
+ }
4893
+ }
4894
+ handleTooltipEvent(event) {
4895
+ switch (event.type) {
4896
+ case 'pointerenter':
4897
+ this.handleEnter();
4898
+ break;
4899
+ case 'pointerleave':
4900
+ this.handleLeave(event);
4901
+ break;
4902
+ }
4903
+ }
4904
+ handleEnter() {
4905
+ if (this.delayTimeout) {
4906
+ clearTimeout(this.delayTimeout);
4907
+ this.delayTimeout = null;
4908
+ }
4909
+ this.interestHandler();
4910
+ }
4911
+ handleLeave(event) {
4912
+ const newTarget = event.relatedTarget;
4913
+ if ((this.tooltip && newTarget && this.tooltip.contains(newTarget)) ||
4914
+ (newTarget === this.trigger)) {
4915
+ return;
4916
+ }
4917
+ this.interestLostHandler();
4918
+ }
4919
+ interestHandler() {
4920
+ var _a;
4921
+ if (this.delay > 0) {
4922
+ this.delayTimeout = window.setTimeout(() => {
4923
+ var _a;
4924
+ (_a = this.tooltip) === null || _a === void 0 ? void 0 : _a.show(this.trigger);
4925
+ this.delayTimeout = null;
4926
+ }, this.delay);
4927
+ }
4928
+ else {
4929
+ (_a = this.tooltip) === null || _a === void 0 ? void 0 : _a.show(this.trigger);
4930
+ }
4931
+ }
4932
+ interestLostHandler() {
4933
+ var _a;
4934
+ if (this.delayTimeout) {
4935
+ clearTimeout(this.delayTimeout);
4936
+ this.delayTimeout = null;
4937
+ }
4938
+ (_a = this.tooltip) === null || _a === void 0 ? void 0 : _a.hide();
4939
+ }
4940
+ render() {
4941
+ return (h(Host, { key: 'a37c76972c4db24292fa95ddacf097055dea70f0', "data-version": version$1 }, h("slot", { key: '51de3cd7dedfc1c5fe5ef86fbf0ab953d07945cb', onSlotchange: () => this.handleSlotChange() })));
4942
+ }
4943
+ get host() { return this; }
4944
+ static get watchers() { return {
4945
+ "for": ["validateControlFor"]
4946
+ }; }
4947
+ static get style() { return PostTooltipTriggerStyle0; }
4948
+ }, [1, "post-tooltip-trigger", {
4949
+ "for": [513],
4950
+ "delay": [2]
4951
+ }, undefined, {
4952
+ "for": ["validateControlFor"]
4953
+ }]);
4954
+ function defineCustomElement() {
4955
+ if (typeof customElements === "undefined") {
4956
+ return;
4957
+ }
4958
+ const components = ["post-tooltip-trigger"];
4959
+ components.forEach(tagName => { switch (tagName) {
4960
+ case "post-tooltip-trigger":
4961
+ if (!customElements.get(tagName)) {
4962
+ customElements.define(tagName, PostTooltipTrigger);
4963
+ }
4964
+ break;
4965
+ } });
4966
+ }
4967
+
4968
+ export { PostTooltipTrigger as P, defineCustomElement as d };