@patternfly/elements 3.0.0 → 3.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 (364) hide show
  1. package/custom-elements.json +490 -484
  2. package/package.json +1 -1
  3. package/pf-accordion/BaseAccordion.js +2 -1
  4. package/pf-accordion/BaseAccordion.js.map +1 -1
  5. package/pf-accordion/BaseAccordionHeader.js +4 -1
  6. package/pf-accordion/BaseAccordionHeader.js.map +1 -1
  7. package/pf-accordion/BaseAccordionPanel.d.ts +1 -1
  8. package/pf-accordion/pf-accordion-header.d.ts +1 -1
  9. package/pf-accordion/pf-accordion.d.ts +0 -5
  10. package/pf-accordion/pf-accordion.js +0 -5
  11. package/pf-accordion/pf-accordion.js.map +1 -1
  12. package/pf-accordion/test/pf-accordion.e2e.d.ts +1 -0
  13. package/pf-accordion/test/pf-accordion.e2e.js +11 -0
  14. package/pf-accordion/test/pf-accordion.e2e.js.map +1 -0
  15. package/pf-accordion/test/pf-accordion.spec.d.ts +1 -0
  16. package/pf-accordion/test/pf-accordion.spec.js +1222 -0
  17. package/pf-accordion/test/pf-accordion.spec.js.map +1 -0
  18. package/pf-avatar/BaseAvatar.d.ts +1 -1
  19. package/pf-avatar/test/pf-avatar.e2e.d.ts +1 -0
  20. package/pf-avatar/test/pf-avatar.e2e.js +11 -0
  21. package/pf-avatar/test/pf-avatar.e2e.js.map +1 -0
  22. package/pf-avatar/test/pf-avatar.spec.d.ts +1 -0
  23. package/pf-avatar/test/pf-avatar.spec.js +45 -0
  24. package/pf-avatar/test/pf-avatar.spec.js.map +1 -0
  25. package/pf-back-to-top/demo/demo.css +25 -0
  26. package/pf-back-to-top/pf-back-to-top.d.ts +1 -1
  27. package/pf-back-to-top/test/pf-back-to-top.e2e.d.ts +1 -0
  28. package/pf-back-to-top/test/pf-back-to-top.e2e.js +11 -0
  29. package/pf-back-to-top/test/pf-back-to-top.e2e.js.map +1 -0
  30. package/pf-back-to-top/test/pf-back-to-top.spec.d.ts +1 -0
  31. package/pf-back-to-top/test/pf-back-to-top.spec.js +267 -0
  32. package/pf-back-to-top/test/pf-back-to-top.spec.js.map +1 -0
  33. package/pf-background-image/pf-background-image.d.ts +1 -4
  34. package/pf-background-image/pf-background-image.js +1 -4
  35. package/pf-background-image/pf-background-image.js.map +1 -1
  36. package/pf-background-image/test/pf-background-image.e2e.d.ts +1 -0
  37. package/pf-background-image/test/pf-background-image.e2e.js +11 -0
  38. package/pf-background-image/test/pf-background-image.e2e.js.map +1 -0
  39. package/pf-background-image/test/pf-background-image.spec.d.ts +1 -0
  40. package/pf-background-image/test/pf-background-image.spec.js +89 -0
  41. package/pf-background-image/test/pf-background-image.spec.js.map +1 -0
  42. package/pf-badge/BaseBadge.d.ts +1 -1
  43. package/pf-badge/test/pf-badge.e2e.d.ts +1 -0
  44. package/pf-badge/test/pf-badge.e2e.js +11 -0
  45. package/pf-badge/test/pf-badge.e2e.js.map +1 -0
  46. package/pf-badge/test/pf-badge.spec.d.ts +1 -0
  47. package/pf-badge/test/pf-badge.spec.js +52 -0
  48. package/pf-badge/test/pf-badge.spec.js.map +1 -0
  49. package/pf-banner/pf-banner.d.ts +1 -10
  50. package/pf-banner/pf-banner.js +0 -9
  51. package/pf-banner/pf-banner.js.map +1 -1
  52. package/pf-banner/test/pf-banner.e2e.d.ts +1 -0
  53. package/pf-banner/test/pf-banner.e2e.js +11 -0
  54. package/pf-banner/test/pf-banner.e2e.js.map +1 -0
  55. package/pf-banner/test/pf-banner.spec.d.ts +1 -0
  56. package/pf-banner/test/pf-banner.spec.js +81 -0
  57. package/pf-banner/test/pf-banner.spec.js.map +1 -0
  58. package/pf-button/BaseButton.d.ts +7 -2
  59. package/pf-button/BaseButton.js +4 -1
  60. package/pf-button/BaseButton.js.map +1 -1
  61. package/pf-button/pf-button.d.ts +1 -17
  62. package/pf-button/pf-button.js +10 -18
  63. package/pf-button/pf-button.js.map +1 -1
  64. package/pf-button/test/pf-button.e2e.d.ts +1 -0
  65. package/pf-button/test/pf-button.e2e.js +11 -0
  66. package/pf-button/test/pf-button.e2e.js.map +1 -0
  67. package/pf-button/test/pf-button.spec.d.ts +1 -0
  68. package/pf-button/test/pf-button.spec.js +124 -0
  69. package/pf-button/test/pf-button.spec.js.map +1 -0
  70. package/pf-card/BaseCard.d.ts +1 -1
  71. package/pf-card/test/pf-card.e2e.d.ts +1 -0
  72. package/pf-card/test/pf-card.e2e.js +11 -0
  73. package/pf-card/test/pf-card.e2e.js.map +1 -0
  74. package/pf-card/test/pf-card.spec.d.ts +1 -0
  75. package/pf-card/test/pf-card.spec.js +160 -0
  76. package/pf-card/test/pf-card.spec.js.map +1 -0
  77. package/pf-chip/pf-chip-group.d.ts +8 -5
  78. package/pf-chip/pf-chip-group.js +10 -10
  79. package/pf-chip/pf-chip-group.js.map +1 -1
  80. package/pf-chip/pf-chip.d.ts +8 -5
  81. package/pf-chip/pf-chip.js +4 -4
  82. package/pf-chip/pf-chip.js.map +1 -1
  83. package/pf-chip/test/pf-chip-group.spec.d.ts +1 -0
  84. package/pf-chip/test/pf-chip-group.spec.js +189 -0
  85. package/pf-chip/test/pf-chip-group.spec.js.map +1 -0
  86. package/pf-chip/test/pf-chip.e2e.d.ts +1 -0
  87. package/pf-chip/test/pf-chip.e2e.js +11 -0
  88. package/pf-chip/test/pf-chip.e2e.js.map +1 -0
  89. package/pf-chip/test/pf-chip.spec.d.ts +1 -0
  90. package/pf-chip/test/pf-chip.spec.js +116 -0
  91. package/pf-chip/test/pf-chip.spec.js.map +1 -0
  92. package/pf-clipboard-copy/pf-clipboard-copy.d.ts +8 -3
  93. package/pf-clipboard-copy/pf-clipboard-copy.js +5 -3
  94. package/pf-clipboard-copy/pf-clipboard-copy.js.map +1 -1
  95. package/pf-clipboard-copy/test/pf-clipboard-copy.e2e.d.ts +1 -0
  96. package/pf-clipboard-copy/test/pf-clipboard-copy.e2e.js +11 -0
  97. package/pf-clipboard-copy/test/pf-clipboard-copy.e2e.js.map +1 -0
  98. package/pf-clipboard-copy/test/pf-clipboard-copy.spec.d.ts +1 -0
  99. package/pf-clipboard-copy/test/pf-clipboard-copy.spec.js +103 -0
  100. package/pf-clipboard-copy/test/pf-clipboard-copy.spec.js.map +1 -0
  101. package/pf-code-block/BaseCodeBlock.js +2 -2
  102. package/pf-code-block/BaseCodeBlock.js.map +1 -1
  103. package/pf-code-block/pf-code-block.d.ts +1 -1
  104. package/pf-code-block/test/pf-code-block.e2e.d.ts +1 -0
  105. package/pf-code-block/test/pf-code-block.e2e.js +11 -0
  106. package/pf-code-block/test/pf-code-block.e2e.js.map +1 -0
  107. package/pf-code-block/test/pf-code-block.spec.d.ts +1 -0
  108. package/pf-code-block/test/pf-code-block.spec.js +89 -0
  109. package/pf-code-block/test/pf-code-block.spec.js.map +1 -0
  110. package/pf-dropdown/pf-dropdown-group.d.ts +1 -1
  111. package/pf-dropdown/pf-dropdown-group.js +4 -1
  112. package/pf-dropdown/pf-dropdown-group.js.map +1 -1
  113. package/pf-dropdown/pf-dropdown-item.d.ts +1 -2
  114. package/pf-dropdown/pf-dropdown-item.js +4 -2
  115. package/pf-dropdown/pf-dropdown-item.js.map +1 -1
  116. package/pf-dropdown/pf-dropdown-menu.d.ts +1 -2
  117. package/pf-dropdown/pf-dropdown-menu.js +8 -6
  118. package/pf-dropdown/pf-dropdown-menu.js.map +1 -1
  119. package/pf-dropdown/pf-dropdown.d.ts +8 -6
  120. package/pf-dropdown/pf-dropdown.js +11 -11
  121. package/pf-dropdown/pf-dropdown.js.map +1 -1
  122. package/pf-dropdown/test/pf-dropdown.e2e.d.ts +1 -0
  123. package/pf-dropdown/test/pf-dropdown.e2e.js +11 -0
  124. package/pf-dropdown/test/pf-dropdown.e2e.js.map +1 -0
  125. package/pf-dropdown/test/pf-dropdown.spec.d.ts +1 -0
  126. package/pf-dropdown/test/pf-dropdown.spec.js +129 -0
  127. package/pf-dropdown/test/pf-dropdown.spec.js.map +1 -0
  128. package/pf-icon/BaseIcon.d.ts +1 -2
  129. package/pf-icon/BaseIcon.js +3 -4
  130. package/pf-icon/BaseIcon.js.map +1 -1
  131. package/pf-icon/demo/icons/rh/boba-tea.js +5 -0
  132. package/pf-icon/demo/icons/rh/lifecycle.js +3 -0
  133. package/pf-icon/test/pf-icon.e2e.d.ts +1 -0
  134. package/pf-icon/test/pf-icon.e2e.js +11 -0
  135. package/pf-icon/test/pf-icon.e2e.js.map +1 -0
  136. package/pf-icon/test/pf-icon.spec.d.ts +1 -0
  137. package/pf-icon/test/pf-icon.spec.js +130 -0
  138. package/pf-icon/test/pf-icon.spec.js.map +1 -0
  139. package/pf-icon/test/rh-icon-aed.js +2 -0
  140. package/pf-icon/test/rh-icon-api.js +2 -0
  141. package/pf-icon/test/rh-icon-atom.js +2 -0
  142. package/pf-icon/test/rh-icon-bike.js +2 -0
  143. package/pf-jump-links/pf-jump-links-item.d.ts +8 -2
  144. package/pf-jump-links/pf-jump-links-item.js +4 -1
  145. package/pf-jump-links/pf-jump-links-item.js.map +1 -1
  146. package/pf-jump-links/pf-jump-links-list.d.ts +1 -1
  147. package/pf-jump-links/pf-jump-links.d.ts +1 -7
  148. package/pf-jump-links/pf-jump-links.js +1 -7
  149. package/pf-jump-links/pf-jump-links.js.map +1 -1
  150. package/pf-jump-links/test/pf-jump-links.e2e.d.ts +1 -0
  151. package/pf-jump-links/test/pf-jump-links.e2e.js +11 -0
  152. package/pf-jump-links/test/pf-jump-links.e2e.js.map +1 -0
  153. package/pf-jump-links/test/pf-jump-links.spec.d.ts +1 -0
  154. package/pf-jump-links/test/pf-jump-links.spec.js +85 -0
  155. package/pf-jump-links/test/pf-jump-links.spec.js.map +1 -0
  156. package/pf-label/BaseLabel.d.ts +1 -1
  157. package/pf-label/pf-label.d.ts +10 -24
  158. package/pf-label/pf-label.js +4 -21
  159. package/pf-label/pf-label.js.map +1 -1
  160. package/pf-label/test/pf-label.e2e.d.ts +1 -0
  161. package/pf-label/test/pf-label.e2e.js +11 -0
  162. package/pf-label/test/pf-label.e2e.js.map +1 -0
  163. package/pf-label/test/pf-label.spec.d.ts +1 -0
  164. package/pf-label/test/pf-label.spec.js +111 -0
  165. package/pf-label/test/pf-label.spec.js.map +1 -0
  166. package/pf-modal/pf-modal.d.ts +1 -6
  167. package/pf-modal/pf-modal.js +6 -8
  168. package/pf-modal/pf-modal.js.map +1 -1
  169. package/pf-modal/test/pf-modal.e2e.d.ts +1 -0
  170. package/pf-modal/test/pf-modal.e2e.js +13 -0
  171. package/pf-modal/test/pf-modal.e2e.js.map +1 -0
  172. package/pf-modal/test/pf-modal.spec.d.ts +1 -0
  173. package/pf-modal/test/pf-modal.spec.js +197 -0
  174. package/pf-modal/test/pf-modal.spec.js.map +1 -0
  175. package/pf-panel/pf-panel.d.ts +1 -1
  176. package/pf-panel/test/pf-panel.e2e.d.ts +1 -0
  177. package/pf-panel/test/pf-panel.e2e.js +11 -0
  178. package/pf-panel/test/pf-panel.e2e.js.map +1 -0
  179. package/pf-panel/test/pf-panel.spec.d.ts +1 -0
  180. package/pf-panel/test/pf-panel.spec.js +22 -0
  181. package/pf-panel/test/pf-panel.spec.js.map +1 -0
  182. package/pf-popover/pf-popover.d.ts +1 -5
  183. package/pf-popover/pf-popover.js +12 -7
  184. package/pf-popover/pf-popover.js.map +1 -1
  185. package/pf-popover/test/pf-popover.e2e.d.ts +1 -0
  186. package/pf-popover/test/pf-popover.e2e.js +11 -0
  187. package/pf-popover/test/pf-popover.e2e.js.map +1 -0
  188. package/pf-popover/test/pf-popover.spec.d.ts +1 -0
  189. package/pf-popover/test/pf-popover.spec.js +233 -0
  190. package/pf-popover/test/pf-popover.spec.js.map +1 -0
  191. package/pf-progress/demo/kitchen-sink.css +4 -0
  192. package/pf-progress/pf-progress.d.ts +1 -22
  193. package/pf-progress/pf-progress.js +1 -22
  194. package/pf-progress/pf-progress.js.map +1 -1
  195. package/pf-progress/test/pf-progress.e2e.d.ts +1 -0
  196. package/pf-progress/test/pf-progress.e2e.js +11 -0
  197. package/pf-progress/test/pf-progress.e2e.js.map +1 -0
  198. package/pf-progress/test/pf-progress.spec.d.ts +1 -0
  199. package/pf-progress/test/pf-progress.spec.js +45 -0
  200. package/pf-progress/test/pf-progress.spec.js.map +1 -0
  201. package/pf-progress-stepper/pf-progress-step.d.ts +1 -1
  202. package/pf-progress-stepper/pf-progress-stepper.d.ts +1 -1
  203. package/pf-progress-stepper/test/pf-progress-stepper.e2e.d.ts +1 -0
  204. package/pf-progress-stepper/test/pf-progress-stepper.e2e.js +11 -0
  205. package/pf-progress-stepper/test/pf-progress-stepper.e2e.js.map +1 -0
  206. package/pf-progress-stepper/test/pf-progress-stepper.spec.d.ts +1 -0
  207. package/pf-progress-stepper/test/pf-progress-stepper.spec.js +18 -0
  208. package/pf-progress-stepper/test/pf-progress-stepper.spec.js.map +1 -0
  209. package/pf-select/pf-option-group.d.ts +1 -1
  210. package/pf-select/pf-option-group.js +2 -0
  211. package/pf-select/pf-option-group.js.map +1 -1
  212. package/pf-select/pf-option.d.ts +1 -2
  213. package/pf-select/pf-option.js +3 -4
  214. package/pf-select/pf-option.js.map +1 -1
  215. package/pf-select/pf-select.d.ts +8 -3
  216. package/pf-select/pf-select.js +51 -21
  217. package/pf-select/pf-select.js.map +1 -1
  218. package/pf-select/test/pf-select.e2e.d.ts +1 -0
  219. package/pf-select/test/pf-select.e2e.js +11 -0
  220. package/pf-select/test/pf-select.e2e.js.map +1 -0
  221. package/pf-select/test/pf-select.spec.d.ts +1 -0
  222. package/pf-select/test/pf-select.spec.js +866 -0
  223. package/pf-select/test/pf-select.spec.js.map +1 -0
  224. package/pf-spinner/BaseSpinner.d.ts +1 -2
  225. package/pf-spinner/BaseSpinner.js +2 -4
  226. package/pf-spinner/BaseSpinner.js.map +1 -1
  227. package/pf-spinner/pf-spinner.d.ts +2 -2
  228. package/pf-spinner/pf-spinner.js +8 -1
  229. package/pf-spinner/pf-spinner.js.map +1 -1
  230. package/pf-spinner/test/pf-spinner.e2e.d.ts +1 -0
  231. package/pf-spinner/test/pf-spinner.e2e.js +11 -0
  232. package/pf-spinner/test/pf-spinner.e2e.js.map +1 -0
  233. package/pf-spinner/test/pf-spinner.spec.d.ts +1 -0
  234. package/pf-spinner/test/pf-spinner.spec.js +64 -0
  235. package/pf-spinner/test/pf-spinner.spec.js.map +1 -0
  236. package/pf-switch/BaseSwitch.d.ts +1 -1
  237. package/pf-switch/BaseSwitch.js +3 -3
  238. package/pf-switch/BaseSwitch.js.map +1 -1
  239. package/pf-switch/test/pf-switch.e2e.d.ts +1 -0
  240. package/pf-switch/test/pf-switch.e2e.js +11 -0
  241. package/pf-switch/test/pf-switch.e2e.js.map +1 -0
  242. package/pf-switch/test/pf-switch.spec.d.ts +1 -0
  243. package/pf-switch/test/pf-switch.spec.js +191 -0
  244. package/pf-switch/test/pf-switch.spec.js.map +1 -0
  245. package/pf-table/pf-caption.d.ts +1 -1
  246. package/pf-table/pf-table.d.ts +1 -3
  247. package/pf-table/pf-table.js +2 -4
  248. package/pf-table/pf-table.js.map +1 -1
  249. package/pf-table/pf-tbody.d.ts +1 -1
  250. package/pf-table/pf-td.d.ts +1 -1
  251. package/pf-table/pf-th.d.ts +1 -1
  252. package/pf-table/pf-th.js +3 -3
  253. package/pf-table/pf-th.js.map +1 -1
  254. package/pf-table/pf-thead.d.ts +1 -1
  255. package/pf-table/pf-tr.d.ts +1 -1
  256. package/pf-table/pf-tr.js +4 -4
  257. package/pf-table/pf-tr.js.map +1 -1
  258. package/pf-table/test/pf-table.e2e.d.ts +1 -0
  259. package/pf-table/test/pf-table.e2e.js +11 -0
  260. package/pf-table/test/pf-table.e2e.js.map +1 -0
  261. package/pf-table/test/pf-table.spec.d.ts +1 -0
  262. package/pf-table/test/pf-table.spec.js +17 -0
  263. package/pf-table/test/pf-table.spec.js.map +1 -0
  264. package/pf-tabs/BaseTab.d.ts +2 -2
  265. package/pf-tabs/BaseTab.js +4 -1
  266. package/pf-tabs/BaseTab.js.map +1 -1
  267. package/pf-tabs/BaseTabPanel.d.ts +1 -1
  268. package/pf-tabs/BaseTabs.d.ts +1 -3
  269. package/pf-tabs/BaseTabs.js +11 -12
  270. package/pf-tabs/BaseTabs.js.map +1 -1
  271. package/pf-tabs/pf-tab-panel.d.ts +1 -1
  272. package/pf-tabs/pf-tab.d.ts +1 -17
  273. package/pf-tabs/pf-tab.js +0 -16
  274. package/pf-tabs/pf-tab.js.map +1 -1
  275. package/pf-tabs/pf-tabs.d.ts +1 -12
  276. package/pf-tabs/pf-tabs.js +2 -13
  277. package/pf-tabs/pf-tabs.js.map +1 -1
  278. package/pf-tabs/test/pf-tabs.e2e.d.ts +1 -0
  279. package/pf-tabs/test/pf-tabs.e2e.js +13 -0
  280. package/pf-tabs/test/pf-tabs.e2e.js.map +1 -0
  281. package/pf-tabs/test/pf-tabs.spec.d.ts +1 -0
  282. package/pf-tabs/test/pf-tabs.spec.js +285 -0
  283. package/pf-tabs/test/pf-tabs.spec.js.map +1 -0
  284. package/pf-text-area/pf-text-area.d.ts +1 -2
  285. package/pf-text-area/pf-text-area.js +5 -5
  286. package/pf-text-area/pf-text-area.js.map +1 -1
  287. package/pf-text-area/test/pf-text-area.e2e.d.ts +1 -0
  288. package/pf-text-area/test/pf-text-area.e2e.js +11 -0
  289. package/pf-text-area/test/pf-text-area.e2e.js.map +1 -0
  290. package/pf-text-area/test/pf-text-area.spec.d.ts +1 -0
  291. package/pf-text-area/test/pf-text-area.spec.js +89 -0
  292. package/pf-text-area/test/pf-text-area.spec.js.map +1 -0
  293. package/pf-text-input/demo/demo.css +6 -0
  294. package/pf-text-input/pf-text-input.d.ts +8 -3
  295. package/pf-text-input/pf-text-input.js +4 -2
  296. package/pf-text-input/pf-text-input.js.map +1 -1
  297. package/pf-text-input/test/pf-text-input.e2e.d.ts +1 -0
  298. package/pf-text-input/test/pf-text-input.e2e.js +11 -0
  299. package/pf-text-input/test/pf-text-input.e2e.js.map +1 -0
  300. package/pf-text-input/test/pf-text-input.spec.d.ts +1 -0
  301. package/pf-text-input/test/pf-text-input.spec.js +20 -0
  302. package/pf-text-input/test/pf-text-input.spec.js.map +1 -0
  303. package/pf-tile/BaseTile.d.ts +1 -1
  304. package/pf-tile/pf-tile.d.ts +0 -12
  305. package/pf-tile/pf-tile.js +0 -12
  306. package/pf-tile/pf-tile.js.map +1 -1
  307. package/pf-tile/test/pf-tile.e2e.d.ts +1 -0
  308. package/pf-tile/test/pf-tile.e2e.js +11 -0
  309. package/pf-tile/test/pf-tile.e2e.js.map +1 -0
  310. package/pf-tile/test/pf-tile.spec.d.ts +1 -0
  311. package/pf-tile/test/pf-tile.spec.js +54 -0
  312. package/pf-tile/test/pf-tile.spec.js.map +1 -0
  313. package/pf-timestamp/pf-timestamp.d.ts +1 -1
  314. package/pf-timestamp/pf-timestamp.js +5 -1
  315. package/pf-timestamp/pf-timestamp.js.map +1 -1
  316. package/pf-timestamp/test/pf-timestamp.e2e.d.ts +1 -0
  317. package/pf-timestamp/test/pf-timestamp.e2e.js +12 -0
  318. package/pf-timestamp/test/pf-timestamp.e2e.js.map +1 -0
  319. package/pf-timestamp/test/pf-timestamp.spec.d.ts +1 -0
  320. package/pf-timestamp/test/pf-timestamp.spec.js +156 -0
  321. package/pf-timestamp/test/pf-timestamp.spec.js.map +1 -0
  322. package/pf-tooltip/BaseTooltip.d.ts +1 -1
  323. package/pf-tooltip/pf-tooltip.d.ts +1 -4
  324. package/pf-tooltip/pf-tooltip.js +6 -7
  325. package/pf-tooltip/pf-tooltip.js.map +1 -1
  326. package/pf-tooltip/test/pf-tooltip.e2e.d.ts +1 -0
  327. package/pf-tooltip/test/pf-tooltip.e2e.js +11 -0
  328. package/pf-tooltip/test/pf-tooltip.e2e.js.map +1 -0
  329. package/pf-tooltip/test/pf-tooltip.spec.d.ts +1 -0
  330. package/pf-tooltip/test/pf-tooltip.spec.js +53 -0
  331. package/pf-tooltip/test/pf-tooltip.spec.js.map +1 -0
  332. package/pfe.min.js +269 -266
  333. package/pfe.min.js.map +3 -3
  334. package/pf-accordion/README.md +0 -44
  335. package/pf-avatar/README.md +0 -31
  336. package/pf-back-to-top/README.md +0 -32
  337. package/pf-background-image/README.md +0 -37
  338. package/pf-badge/README.md +0 -57
  339. package/pf-banner/README.md +0 -60
  340. package/pf-button/README.md +0 -61
  341. package/pf-card/README.md +0 -34
  342. package/pf-chip/README.md +0 -20
  343. package/pf-clipboard-copy/README.md +0 -8
  344. package/pf-code-block/README.md +0 -77
  345. package/pf-dropdown/README.md +0 -46
  346. package/pf-icon/README.md +0 -86
  347. package/pf-icon/icons/fab/readme.svg +0 -1
  348. package/pf-jump-links/README.md +0 -27
  349. package/pf-label/README.md +0 -61
  350. package/pf-modal/README.md +0 -63
  351. package/pf-panel/README.md +0 -10
  352. package/pf-popover/README.md +0 -48
  353. package/pf-progress/README.md +0 -33
  354. package/pf-progress-stepper/README.md +0 -41
  355. package/pf-select/README.md +0 -21
  356. package/pf-spinner/README.md +0 -46
  357. package/pf-switch/README.md +0 -91
  358. package/pf-table/README.md +0 -43
  359. package/pf-tabs/README.md +0 -40
  360. package/pf-text-area/README.md +0 -11
  361. package/pf-text-input/README.md +0 -9
  362. package/pf-tile/README.md +0 -12
  363. package/pf-timestamp/README.md +0 -64
  364. package/pf-tooltip/README.md +0 -64
@@ -0,0 +1,1222 @@
1
+ import { expect, html, aTimeout, nextFrame } from '@open-wc/testing';
2
+ import { createFixture } from '@patternfly/pfe-tools/test/create-fixture.js';
3
+ import { sendKeys } from '@web/test-runner-commands';
4
+ // Import the element we're testing.
5
+ import { PfAccordion, PfAccordionPanel, PfAccordionHeader } from '@patternfly/elements/pf-accordion/pf-accordion.js';
6
+ import { PfSwitch } from '@patternfly/elements/pf-switch/pf-switch.js';
7
+ import { Logger } from '@patternfly/pfe-core/controllers/logger.js';
8
+ import '@patternfly/pfe-tools/test/stub-logger.js';
9
+ import { allUpdates } from '@patternfly/pfe-tools/test/utils.js';
10
+ describe('<pf-accordion>', function () {
11
+ let element;
12
+ let headers;
13
+ let panels;
14
+ let header;
15
+ let panel;
16
+ let secondHeader;
17
+ let secondPanel;
18
+ async function clickFirstHeader() {
19
+ header.click();
20
+ await allUpdates(element);
21
+ }
22
+ async function clickSecondHeader() {
23
+ secondHeader.click();
24
+ await allUpdates(element);
25
+ }
26
+ async function callToggle(index) {
27
+ element.toggle(index);
28
+ await allUpdates(element);
29
+ }
30
+ async function callExpand(index) {
31
+ element.expand(index);
32
+ await allUpdates(element);
33
+ }
34
+ async function callCollapse(index) {
35
+ element.collapse(index);
36
+ await allUpdates(element);
37
+ }
38
+ async function callExpandAll() {
39
+ element.expandAll();
40
+ await allUpdates(element);
41
+ }
42
+ async function callCollapseAll() {
43
+ element.collapseAll();
44
+ await allUpdates(element);
45
+ }
46
+ function press(press) {
47
+ return async function () {
48
+ await sendKeys({ press });
49
+ await allUpdates(element);
50
+ };
51
+ }
52
+ it('imperatively instantiates', function () {
53
+ expect(document.createElement('pf-accordion')).to.be.an.instanceof(PfAccordion);
54
+ expect(document.createElement('pf-accordion-header')).to.be.an.instanceof(PfAccordionHeader);
55
+ expect(document.createElement('pf-accordion-panel')).to.be.an.instanceof(PfAccordionPanel);
56
+ });
57
+ it('simply instantiating', async function () {
58
+ element = await createFixture(html `<pf-accordion></pf-accordion>`);
59
+ expect(element, 'pf-accordion should be an instance of PfAccordion')
60
+ .to.be.an.instanceof(customElements.get('pf-accordion'))
61
+ .and
62
+ .to.be.an.instanceof(PfAccordion);
63
+ });
64
+ describe('in typical usage', function () {
65
+ beforeEach(async function () {
66
+ element = await createFixture(html `
67
+ <pf-accordion>
68
+ <pf-accordion-header id="header1" data-index="0">
69
+ <h3>Consetetur sadipscing elitr?</h3>
70
+ </pf-accordion-header>
71
+ <pf-accordion-panel id="panel1" data-index="0">
72
+ <p><a href="#">Lorem ipsum dolor sit amet</a>, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
73
+ ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea
74
+ rebum.</p>
75
+ </pf-accordion-panel>
76
+ <pf-accordion-header data-index="1">
77
+ <h3>Labore et dolore magna aliquyam erat?</h3>
78
+ </pf-accordion-header>
79
+ <pf-accordion-panel data-index="1">
80
+ <p><a href="#">Lorem ipsum dolor sit amet</a>, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
81
+ ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea
82
+ rebum.</p>
83
+ </pf-accordion-panel>
84
+ <pf-accordion-header data-index="2">
85
+ <h3>Incididunt in Lorem voluptate eiusmod dolor?</h3>
86
+ </pf-accordion-header>
87
+ <pf-accordion-panel data-index="2">
88
+ <p><a href="#">Lorem ipsum dolor sit amet</a>, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
89
+ ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea
90
+ rebum.</p>
91
+ </pf-accordion-panel>
92
+ </pf-accordion>
93
+ `);
94
+ headers = Array.from(element.querySelectorAll('pf-accordion-header'));
95
+ panels = Array.from(element.querySelectorAll('pf-accordion-panel'));
96
+ [header, secondHeader] = headers;
97
+ [panel, secondPanel] = panels;
98
+ await allUpdates(element);
99
+ });
100
+ it('randomly generates ids on children', function () {
101
+ expect(secondHeader.id).to.match(/pf-/);
102
+ expect(secondPanel.id).to.match(/panel-/);
103
+ });
104
+ it('preserves existing IDs', function () {
105
+ expect(element.querySelector('#header1')).to.exist;
106
+ expect(element.querySelector('#panel1')).to.exist;
107
+ });
108
+ describe('clicking the first header', function () {
109
+ beforeEach(clickFirstHeader);
110
+ it('expands first pair', function () {
111
+ expect(header.shadowRoot.querySelector('button')?.getAttribute('aria-expanded')).to.equal('true');
112
+ expect(header.expanded).to.be.true;
113
+ expect(panel.hasAttribute('expanded')).to.be.true;
114
+ expect(panel.expanded).to.be.true;
115
+ });
116
+ describe('then clicking first header again', function () {
117
+ beforeEach(clickFirstHeader);
118
+ it('collapses first pair', function () {
119
+ expect(header.shadowRoot.querySelector('button')?.getAttribute('aria-expanded')).to.equal('false');
120
+ expect(header.expanded).to.be.false;
121
+ expect(panel.hasAttribute('expanded')).to.be.false;
122
+ expect(panel.expanded).to.be.false;
123
+ });
124
+ });
125
+ });
126
+ /* API TESTS */
127
+ describe('calling toggle(1)', function () {
128
+ beforeEach(callToggle.bind(this, 1));
129
+ it('expands second pair', function () {
130
+ expect(secondHeader.shadowRoot.querySelector('button')?.getAttribute('aria-expanded')).to.equal('true');
131
+ expect(secondHeader.expanded).to.be.true;
132
+ expect(secondPanel.hasAttribute('expanded')).to.be.true;
133
+ expect(secondPanel.expanded).to.be.true;
134
+ });
135
+ describe('then calling toggle(1)', function () {
136
+ beforeEach(callToggle.bind(this, 1));
137
+ it('collapses second pair', function () {
138
+ expect(secondHeader.shadowRoot.querySelector('button')?.getAttribute('aria-expanded')).to.equal('false');
139
+ expect(secondHeader.expanded).to.be.false;
140
+ expect(secondPanel.hasAttribute('expanded')).to.be.false;
141
+ expect(secondPanel.expanded).to.be.false;
142
+ });
143
+ });
144
+ });
145
+ describe('calling expand(1)', function () {
146
+ beforeEach(callExpand.bind(this, 1));
147
+ it('expands second pair', function () {
148
+ expect(secondHeader.shadowRoot.querySelector('button')?.getAttribute('aria-expanded')).to.equal('true');
149
+ expect(secondHeader.expanded).to.be.true;
150
+ expect(secondPanel.hasAttribute('expanded')).to.be.true;
151
+ expect(secondPanel.expanded).to.be.true;
152
+ });
153
+ describe('then calling collapse(1)', function () {
154
+ beforeEach(callCollapse.bind(this, 1));
155
+ it('collapses second pair', function () {
156
+ expect(secondHeader.shadowRoot.querySelector('button')?.getAttribute('aria-expanded')).to.equal('false');
157
+ expect(secondHeader.expanded).to.be.false;
158
+ expect(secondPanel.hasAttribute('expanded')).to.be.false;
159
+ expect(secondPanel.expanded).to.be.false;
160
+ });
161
+ });
162
+ });
163
+ describe('calling expandAll()', function () {
164
+ beforeEach(callExpandAll.bind(this));
165
+ it('expands all pairs', function () {
166
+ for (const header of headers) {
167
+ expect(header.shadowRoot.querySelector('button')?.getAttribute('aria-expanded')).to.equal('true');
168
+ expect(header.expanded).to.be.true;
169
+ }
170
+ for (const panel of panels) {
171
+ expect(panel.hasAttribute('expanded')).to.be.true;
172
+ expect(panel.expanded).to.be.true;
173
+ }
174
+ });
175
+ describe('then calling collapseAll()', function () {
176
+ beforeEach(callCollapseAll.bind(this));
177
+ it('collapses all pairs', function () {
178
+ for (const header of headers) {
179
+ expect(header.shadowRoot.querySelector('button')?.getAttribute('aria-expanded')).to.equal('false');
180
+ expect(header.expanded).to.be.false;
181
+ }
182
+ for (const panel of panels) {
183
+ expect(panel.hasAttribute('expanded')).to.be.false;
184
+ expect(panel.expanded).to.be.false;
185
+ }
186
+ });
187
+ });
188
+ });
189
+ /* ATTRIBUTE TESTS */
190
+ describe('setting expanded-index attribute', function () {
191
+ const indices = '1,2';
192
+ beforeEach(async function () {
193
+ element.setAttribute('expanded-index', indices);
194
+ await allUpdates(element);
195
+ await nextFrame();
196
+ });
197
+ it('expands the pairs listed in the expanded-index attribute', function () {
198
+ for (const idx of indices.split(',').map(x => parseInt(x))) {
199
+ const header = headers[idx];
200
+ const panel = panels[idx];
201
+ expect(header.expanded, 'header expanded DOM property').to.be.true;
202
+ expect(header.hasAttribute('expanded'), 'header expanded attribute').to.be.true;
203
+ expect(panel.expanded, 'panel expanded DOM property').to.be.true;
204
+ expect(panel.hasAttribute('expanded'), 'panel expanded attribute').to.be.true;
205
+ }
206
+ });
207
+ });
208
+ describe('dynamically adding pairs', function () {
209
+ beforeEach(async function () {
210
+ const newHeader = document.createElement('pf-accordion-header');
211
+ newHeader.id = 'newHeader';
212
+ newHeader.innerHTML = `<h2>New Header</h2>`;
213
+ const newPanel = document.createElement('pf-accordion-panel');
214
+ newPanel.id = 'newPanel';
215
+ newPanel.innerHTML = `New Panel`;
216
+ element.appendChild(newHeader);
217
+ element.appendChild(newPanel);
218
+ await allUpdates(element);
219
+ });
220
+ it('properly initializes new pairs', function () {
221
+ const newHeader = headers.at(-1);
222
+ const newPanel = panels.at(-1);
223
+ expect(newHeader?.hasAttribute('id'), 'header has an id').to.be.true;
224
+ expect(newHeader?.getAttribute('aria-controls'), 'header has aria-controls')
225
+ .to.equal(newPanel?.getAttribute('id'));
226
+ expect(newPanel?.getAttribute('role'), 'panel has role').to.equal('region');
227
+ expect(newPanel?.hasAttribute('id'), 'panel has id').to.be.true;
228
+ expect(newPanel?.getAttribute('aria-labelledby'), 'panel has aria-labelledby')
229
+ .to.equal(newHeader?.getAttribute('id'));
230
+ });
231
+ });
232
+ describe('<pf-accordion-header>', function () {
233
+ it('should upgrade pf-accordion-header', function () {
234
+ expect(header)
235
+ .to.be.an.instanceof(customElements.get('pf-accordion-header'))
236
+ .and
237
+ .to.be.an.instanceOf(PfAccordionHeader);
238
+ });
239
+ it('must have an id', function () {
240
+ expect(header.id).to.be.ok;
241
+ });
242
+ it('should add the aria-controls attribute corresponding to the header ID', function () {
243
+ expect(header.getAttribute('aria-controls')).to.equal(panel.id);
244
+ });
245
+ });
246
+ describe('<pf-accordion-panel>', function () {
247
+ it('should upgrade pf-accordion-panel', function () {
248
+ expect(panel)
249
+ .to.be.an.instanceof(customElements.get('pf-accordion-panel'))
250
+ .and
251
+ .to.be.an.instanceOf(PfAccordionPanel);
252
+ });
253
+ it('must have an id', function () {
254
+ expect(panel.id).to.be.ok;
255
+ });
256
+ it('should add the aria-labelledby attribute corresponding to the header ID', function () {
257
+ expect(panel.getAttribute('aria-labelledby')).to.equal(header.id);
258
+ });
259
+ it('should set the role attribute to "region"', function () {
260
+ expect(panel.getAttribute('role'), 'role').to.equal('region');
261
+ });
262
+ });
263
+ /** @see https://www.w3.org/TR/wai-aria-practices/examples/accordion/accordion.html */
264
+ describe('for assistive technology', function () {
265
+ let header1;
266
+ let header2;
267
+ let header3;
268
+ let panel1;
269
+ let panel2;
270
+ let panel3;
271
+ beforeEach(async function () {
272
+ [header1, header2, header3] = element.querySelectorAll('pf-accordion-header');
273
+ [panel1, panel2, panel3] = element.querySelectorAll('pf-accordion-panel');
274
+ });
275
+ afterEach(async function () {
276
+ [header1, header2, header3] = [];
277
+ [panel1, panel2, panel3] = [];
278
+ });
279
+ describe('with all panels closed', function () {
280
+ it('applies hidden attribute to all panels', function () {
281
+ expect(panel1.hidden, 'panel1').to.be.true;
282
+ expect(panel2.hidden, 'panel2').to.be.true;
283
+ expect(panel3.hidden, 'panel3').to.be.true;
284
+ });
285
+ });
286
+ describe('with all panels open', function () {
287
+ beforeEach(async function () {
288
+ for (const header of element.querySelectorAll('pf-accordion-header')) {
289
+ header.click();
290
+ }
291
+ await nextFrame();
292
+ });
293
+ it('removes hidden attribute from all panels', function () {
294
+ expect(panel1.hidden, 'panel1').to.be.false;
295
+ expect(panel2.hidden, 'panel2').to.be.false;
296
+ expect(panel3.hidden, 'panel3').to.be.false;
297
+ });
298
+ });
299
+ describe('when focus is on the first header', function () {
300
+ beforeEach(function () {
301
+ header1.focus();
302
+ });
303
+ beforeEach(nextFrame);
304
+ describe('Space', function () {
305
+ beforeEach(press(' '));
306
+ it('expands the first panel', function () {
307
+ expect(panel1.expanded).to.be.true;
308
+ expect(panel2.expanded).to.be.false;
309
+ expect(panel3.expanded).to.be.false;
310
+ });
311
+ it('removes hidden attribute from the first panel', function () {
312
+ expect(panel1.hidden, 'panel1').to.be.false;
313
+ expect(panel2.hidden, 'panel2').to.be.true;
314
+ expect(panel3.hidden, 'panel3').to.be.true;
315
+ });
316
+ });
317
+ describe('Enter', function () {
318
+ beforeEach(press('Enter'));
319
+ it('expands the first panel', function () {
320
+ expect(panel1.expanded).to.be.true;
321
+ expect(panel2.expanded).to.be.false;
322
+ expect(panel3.expanded).to.be.false;
323
+ });
324
+ it('removes hidden attribute from the first panel', function () {
325
+ expect(panel1.hidden, 'panel1').to.be.false;
326
+ expect(panel2.hidden, 'panel2').to.be.true;
327
+ expect(panel3.hidden, 'panel3').to.be.true;
328
+ });
329
+ });
330
+ describe('Tab', function () {
331
+ beforeEach(press('Tab'));
332
+ it('moves focus to the body', function () {
333
+ expect(document.activeElement).to.equal(document.body);
334
+ });
335
+ });
336
+ describe('Shift+Tab', function () {
337
+ beforeEach(press('Shift+Tab'));
338
+ it('moves focus to the body', function () {
339
+ expect(document.activeElement).to.equal(document.body);
340
+ });
341
+ });
342
+ describe('ArrowDown', function () {
343
+ beforeEach(press('ArrowDown'));
344
+ it('moves focus to the second header', function () {
345
+ expect(document.activeElement).to.equal(header2);
346
+ });
347
+ it('does not open panels', function () {
348
+ expect(panel1.expanded).to.be.false;
349
+ expect(panel2.expanded).to.be.false;
350
+ expect(panel3.expanded).to.be.false;
351
+ });
352
+ });
353
+ describe('ArrowUp', function () {
354
+ beforeEach(press('ArrowUp'));
355
+ it('moves focus to the last header', function () {
356
+ expect(document.activeElement).to.equal(header3);
357
+ });
358
+ it('does not open panels', function () {
359
+ expect(panel1.expanded).to.be.false;
360
+ expect(panel2.expanded).to.be.false;
361
+ expect(panel3.expanded).to.be.false;
362
+ });
363
+ });
364
+ describe('Home', function () {
365
+ beforeEach(press('Home'));
366
+ it('moves focus to the first header', function () {
367
+ expect(document.activeElement).to.equal(header1);
368
+ });
369
+ it('does not open panels', function () {
370
+ expect(panel1.expanded).to.be.false;
371
+ expect(panel2.expanded).to.be.false;
372
+ expect(panel3.expanded).to.be.false;
373
+ });
374
+ });
375
+ describe('End', function () {
376
+ beforeEach(press('End'));
377
+ it('moves focus to the last header', function () {
378
+ expect(document.activeElement).to.equal(header3);
379
+ });
380
+ it('does not open panels', function () {
381
+ expect(panel1.expanded).to.be.false;
382
+ expect(panel2.expanded).to.be.false;
383
+ expect(panel3.expanded).to.be.false;
384
+ });
385
+ });
386
+ });
387
+ describe('when focus is on the middle header', function () {
388
+ beforeEach(async function () {
389
+ header2.focus();
390
+ await nextFrame();
391
+ });
392
+ describe('Space', function () {
393
+ beforeEach(press(' '));
394
+ it('expands the middle panel', function () {
395
+ expect(panel1.expanded).to.be.false;
396
+ expect(panel2.expanded).to.be.true;
397
+ expect(panel3.expanded).to.be.false;
398
+ });
399
+ });
400
+ describe('Enter', function () {
401
+ beforeEach(press('Enter'));
402
+ it('expands the middle panel', function () {
403
+ expect(panel1.expanded).to.be.false;
404
+ expect(panel2.expanded).to.be.true;
405
+ expect(panel3.expanded).to.be.false;
406
+ });
407
+ });
408
+ describe('Tab', function () {
409
+ beforeEach(press('Tab'));
410
+ it('moves focus to the body', function () {
411
+ expect(document.activeElement).to.equal(document.body);
412
+ });
413
+ });
414
+ describe('ArrowDown', function () {
415
+ beforeEach(press('ArrowDown'));
416
+ it('moves focus to the last header', function () {
417
+ expect(document.activeElement).to.equal(header3);
418
+ });
419
+ });
420
+ describe('ArrowUp', function () {
421
+ beforeEach(press('ArrowUp'));
422
+ it('moves focus to the first header', function () {
423
+ expect(document.activeElement).to.equal(header1);
424
+ });
425
+ });
426
+ describe('Home', function () {
427
+ beforeEach(press('Home'));
428
+ it('moves focus to the first header', function () {
429
+ expect(document.activeElement).to.equal(header1);
430
+ });
431
+ });
432
+ describe('End', function () {
433
+ beforeEach(press('End'));
434
+ it('moves focus to the last header', function () {
435
+ expect(document.activeElement).to.equal(header3);
436
+ });
437
+ });
438
+ });
439
+ describe('when focus is on the last header', function () {
440
+ beforeEach(async function () {
441
+ header3.focus();
442
+ await nextFrame();
443
+ });
444
+ describe('Space', function () {
445
+ beforeEach(press(' '));
446
+ it('expands the last panel', function () {
447
+ expect(panel1.expanded).to.be.false;
448
+ expect(panel2.expanded).to.be.false;
449
+ expect(panel3.expanded).to.be.true;
450
+ });
451
+ describe('then Space', function () {
452
+ beforeEach(press(' '));
453
+ it('collapses the last panel', function () {
454
+ expect(panel1.expanded).to.be.false;
455
+ expect(panel2.expanded).to.be.false;
456
+ expect(panel3.expanded).to.be.false;
457
+ });
458
+ });
459
+ });
460
+ describe('Enter', function () {
461
+ beforeEach(press('Enter'));
462
+ it('expands the last panel', function () {
463
+ expect(panel1.expanded).to.be.false;
464
+ expect(panel2.expanded).to.be.false;
465
+ expect(panel3.expanded).to.be.true;
466
+ });
467
+ describe('then Enter', function () {
468
+ beforeEach(press('Enter'));
469
+ it('collapses the last panel', function () {
470
+ expect(panel1.expanded).to.be.false;
471
+ expect(panel2.expanded).to.be.false;
472
+ expect(panel3.expanded).to.be.false;
473
+ });
474
+ });
475
+ });
476
+ describe('Shift+Tab', function () {
477
+ beforeEach(press('Shift+Tab'));
478
+ it('moves focus to the body', function () {
479
+ expect(document.activeElement).to.equal(document.body);
480
+ });
481
+ });
482
+ describe('ArrowDown', function () {
483
+ beforeEach(press('ArrowDown'));
484
+ it('moves focus to the first header', function () {
485
+ expect(document.activeElement).to.equal(header1);
486
+ });
487
+ });
488
+ describe('ArrowUp', function () {
489
+ beforeEach(press('ArrowUp'));
490
+ it('moves focus to the middle header', function () {
491
+ expect(document.activeElement).to.equal(header2);
492
+ });
493
+ });
494
+ describe('Home', function () {
495
+ beforeEach(press('Home'));
496
+ it('moves focus to the first header', function () {
497
+ expect(document.activeElement).to.equal(header1);
498
+ });
499
+ });
500
+ describe('End', function () {
501
+ beforeEach(press('End'));
502
+ it('moves focus to the last header', function () {
503
+ expect(document.activeElement).to.equal(header3);
504
+ });
505
+ });
506
+ });
507
+ describe('when the first panel is expanded', function () {
508
+ beforeEach(async function () {
509
+ element.expand(0);
510
+ await aTimeout(500);
511
+ });
512
+ describe('and focus is on the first header', function () {
513
+ describe('Space', function () {
514
+ beforeEach(press(' '));
515
+ it('collapses the first panel', function () {
516
+ expect(panel1.expanded).to.be.false;
517
+ expect(panel2.expanded).to.be.false;
518
+ expect(panel3.expanded).to.be.false;
519
+ });
520
+ });
521
+ describe('Enter', function () {
522
+ beforeEach(press('Enter'));
523
+ it('collapses the first panel', function () {
524
+ expect(panel1.expanded).to.be.false;
525
+ expect(panel2.expanded).to.be.false;
526
+ expect(panel3.expanded).to.be.false;
527
+ });
528
+ });
529
+ describe('Tab', function () {
530
+ beforeEach(press('Tab'));
531
+ it('moves focus to the link in the first panel', function () {
532
+ expect(document.activeElement).to.equal(panel1.querySelector('a'));
533
+ });
534
+ describe('Tab', function () {
535
+ beforeEach(press('Tab'));
536
+ it('moves focus to the body', function () {
537
+ expect(document.activeElement).to.equal(document.body);
538
+ });
539
+ describe('Shift+Tab', function () {
540
+ beforeEach(press('Shift+Tab'));
541
+ it('keeps focus on the link in the first panel', function () {
542
+ expect(document.activeElement).to.equal(panel1.querySelector('a'));
543
+ });
544
+ });
545
+ });
546
+ describe('Space', function () {
547
+ beforeEach(press(' '));
548
+ describe('ArrowDown', function () {
549
+ beforeEach(press('ArrowDown'));
550
+ it('keeps focus on the link in the first panel', function () {
551
+ expect(document.activeElement).to.equal(panel1.querySelector('a'));
552
+ });
553
+ it('does not open other panels', function () {
554
+ expect(panel1.expanded).to.be.true;
555
+ expect(panel2.expanded).to.be.false;
556
+ expect(panel3.expanded).to.be.false;
557
+ });
558
+ });
559
+ describe('ArrowUp', function () {
560
+ beforeEach(press('ArrowUp'));
561
+ it('keeps focus on the link in the first panel', function () {
562
+ expect(document.activeElement).to.equal(panel1.querySelector('a'));
563
+ });
564
+ it('does not open other panels', function () {
565
+ expect(panel1.expanded).to.be.true;
566
+ expect(panel2.expanded).to.be.false;
567
+ expect(panel3.expanded).to.be.false;
568
+ });
569
+ });
570
+ describe('Home', function () {
571
+ beforeEach(press('Home'));
572
+ it('keeps focus on the link in the first panel', function () {
573
+ expect(document.activeElement).to.equal(panel1.querySelector('a'));
574
+ });
575
+ it('does not open other panels', function () {
576
+ expect(panel1.expanded).to.be.true;
577
+ expect(panel2.expanded).to.be.false;
578
+ expect(panel3.expanded).to.be.false;
579
+ });
580
+ });
581
+ describe('End', function () {
582
+ beforeEach(press('End'));
583
+ it('keeps focus on the link in the first panel', function () {
584
+ expect(document.activeElement).to.equal(panel1.querySelector('a'));
585
+ });
586
+ it('does not open other panels', function () {
587
+ expect(panel1.expanded).to.be.true;
588
+ expect(panel2.expanded).to.be.false;
589
+ expect(panel3.expanded).to.be.false;
590
+ });
591
+ });
592
+ });
593
+ });
594
+ describe('Shift+Tab', function () {
595
+ beforeEach(press('Shift+Tab'));
596
+ it('moves focus to the body', function () {
597
+ expect(document.activeElement).to.equal(document.body);
598
+ });
599
+ });
600
+ describe('ArrowDown', function () {
601
+ beforeEach(press('ArrowDown'));
602
+ it('moves focus to the second header', function () {
603
+ expect(document.activeElement).to.equal(header2);
604
+ });
605
+ it('does not open other panels', function () {
606
+ expect(panel1.expanded).to.be.true;
607
+ expect(panel2.expanded).to.be.false;
608
+ expect(panel3.expanded).to.be.false;
609
+ });
610
+ });
611
+ describe('ArrowUp', function () {
612
+ beforeEach(press('ArrowUp'));
613
+ it('moves focus to the last header', function () {
614
+ expect(document.activeElement).to.equal(header3);
615
+ });
616
+ it('does not open other panels', function () {
617
+ expect(panel1.expanded).to.be.true;
618
+ expect(panel2.expanded).to.be.false;
619
+ expect(panel3.expanded).to.be.false;
620
+ });
621
+ });
622
+ describe('Home', function () {
623
+ beforeEach(press('Home'));
624
+ it('moves focus to the first header', function () {
625
+ expect(document.activeElement).to.equal(header1);
626
+ });
627
+ it('does not open other panels', function () {
628
+ expect(panel1.expanded).to.be.true;
629
+ expect(panel2.expanded).to.be.false;
630
+ expect(panel3.expanded).to.be.false;
631
+ });
632
+ });
633
+ describe('End', function () {
634
+ beforeEach(press('End'));
635
+ it('moves focus to the last header', function () {
636
+ expect(document.activeElement).to.equal(header3);
637
+ });
638
+ it('does not open other panels', function () {
639
+ expect(panel1.expanded).to.be.true;
640
+ expect(panel2.expanded).to.be.false;
641
+ expect(panel3.expanded).to.be.false;
642
+ });
643
+ });
644
+ });
645
+ describe('and focus is on the middle header', function () {
646
+ beforeEach(press('Tab'));
647
+ beforeEach(press('Tab'));
648
+ describe('Shift+Tab', function () {
649
+ beforeEach(press('Shift+Tab'));
650
+ it('moves focus to the link in first panel', async function () {
651
+ expect(document.activeElement).to.equal(panel1.querySelector('a'));
652
+ });
653
+ });
654
+ });
655
+ });
656
+ describe('when the middle panel is expanded', function () {
657
+ beforeEach(async function () {
658
+ element.expand(1);
659
+ await nextFrame();
660
+ expect(panel2.expanded).to.be.true;
661
+ });
662
+ it('applies hidden attribute to the middle panel', function () {
663
+ expect(panel1.hidden, 'panel1').to.be.true;
664
+ expect(panel2.hidden, 'panel2').to.be.false;
665
+ expect(panel3.hidden, 'panel3').to.be.true;
666
+ });
667
+ describe('and focus is on the middle header', function () {
668
+ beforeEach(async function () {
669
+ header2.focus();
670
+ await nextFrame();
671
+ });
672
+ describe('Space', function () {
673
+ beforeEach(press(' '));
674
+ it('collapses the second panel', function () {
675
+ expect(panel1.expanded).to.be.false;
676
+ expect(panel2.expanded).to.be.false;
677
+ expect(panel3.expanded).to.be.false;
678
+ });
679
+ });
680
+ describe('Enter', function () {
681
+ beforeEach(press('Enter'));
682
+ it('collapses the second panel', function () {
683
+ expect(panel1.expanded).to.be.false;
684
+ expect(panel2.expanded).to.be.false;
685
+ expect(panel3.expanded).to.be.false;
686
+ });
687
+ });
688
+ describe('Tab', function () {
689
+ beforeEach(press('Tab'));
690
+ it('moves focus to the link in the second panel', function () {
691
+ expect(document.activeElement).to.equal(panel2.querySelector('a'));
692
+ });
693
+ });
694
+ describe('Shift+Tab', function () {
695
+ beforeEach(press('Shift+Tab'));
696
+ it('moves focus to the body', function () {
697
+ expect(document.activeElement).to.equal(document.body);
698
+ });
699
+ });
700
+ describe('ArrowUp', function () {
701
+ beforeEach(press('ArrowUp'));
702
+ it('moves focus to the first header', function () {
703
+ expect(document.activeElement).to.equal(header1);
704
+ });
705
+ });
706
+ describe('ArrowDown', function () {
707
+ beforeEach(press('ArrowDown'));
708
+ it('moves focus to the last header', function () {
709
+ expect(document.activeElement).to.equal(header3);
710
+ });
711
+ });
712
+ });
713
+ describe('and focus is on the last header', function () {
714
+ beforeEach(async function () {
715
+ header3.focus();
716
+ await nextFrame();
717
+ });
718
+ describe('Shift+Tab', function () {
719
+ beforeEach(press('Shift+Tab'));
720
+ it('moves focus to the link in middle panel', function () {
721
+ expect(document.activeElement).to.equal(panel2.querySelector('a'));
722
+ });
723
+ });
724
+ });
725
+ });
726
+ describe('when the last panel is expanded', function () {
727
+ beforeEach(async function () {
728
+ element.expand(2);
729
+ await nextFrame();
730
+ expect(panel3.expanded).to.be.true;
731
+ });
732
+ describe('when focus is on the last header', function () {
733
+ beforeEach(async function () {
734
+ header3.focus();
735
+ await nextFrame();
736
+ });
737
+ describe('Tab', function () {
738
+ beforeEach(press('Tab'));
739
+ it('moves focus to the link in last panel', function () {
740
+ expect(document.activeElement).to.equal(panel3.querySelector('a'));
741
+ });
742
+ });
743
+ });
744
+ });
745
+ });
746
+ });
747
+ describe('with single attribute', function () {
748
+ beforeEach(async function () {
749
+ element = await createFixture(html `
750
+ <pf-accordion single>
751
+ <pf-accordion-header id="header1" data-index="0">
752
+ <h3>Consetetur sadipscing elitr?</h3>
753
+ </pf-accordion-header>
754
+ <pf-accordion-panel id="panel1" data-index="0">
755
+ <p><a href="#">Lorem ipsum dolor sit amet</a>, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
756
+ ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea
757
+ rebum.</p>
758
+ </pf-accordion-panel>
759
+ <pf-accordion-header data-index="1">
760
+ <h3>Labore et dolore magna aliquyam erat?</h3>
761
+ </pf-accordion-header>
762
+ <pf-accordion-panel data-index="1">
763
+ <p><a href="#">Lorem ipsum dolor sit amet</a>, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
764
+ ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea
765
+ rebum.</p>
766
+ </pf-accordion-panel>
767
+ <pf-accordion-header data-index="2">
768
+ <h3>Incididunt in Lorem voluptate eiusmod dolor?</h3>
769
+ </pf-accordion-header>
770
+ <pf-accordion-panel data-index="2">
771
+ <p><a href="#">Lorem ipsum dolor sit amet</a>, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
772
+ ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea
773
+ rebum.</p>
774
+ </pf-accordion-panel>
775
+ </pf-accordion>
776
+ `);
777
+ headers = Array.from(element.querySelectorAll('pf-accordion-header'));
778
+ panels = Array.from(element.querySelectorAll('pf-accordion-panel'));
779
+ [header, secondHeader] = headers;
780
+ [panel, secondPanel] = panels;
781
+ await allUpdates(element);
782
+ });
783
+ describe('clicking the first header', function () {
784
+ beforeEach(clickFirstHeader);
785
+ describe('then clicking the second header', function () {
786
+ beforeEach(clickSecondHeader);
787
+ it('collapses all pairs except second', function () {
788
+ headers.forEach((header, i) => {
789
+ const ariaExpanded = header.shadowRoot.querySelector('button')?.getAttribute('aria-expanded');
790
+ if (i === 1) {
791
+ expect(header.expanded, `headers[${i}].expanded`).to.be.true;
792
+ expect(ariaExpanded, `headers[${i}].ariaExpanded`).to.equal('true');
793
+ }
794
+ else {
795
+ expect(header.expanded, `headers[${i}].expanded`).to.be.false;
796
+ expect(ariaExpanded, `headers[${i}].ariaExpanded`).to.equal('false');
797
+ }
798
+ });
799
+ panels.forEach((panel, i) => {
800
+ if (i === 1) {
801
+ expect(panel.expanded, `panels[${i}].expanded`).to.be.true;
802
+ }
803
+ else {
804
+ expect(panel.expanded, `panels[${i}].expanded`).to.be.false;
805
+ }
806
+ });
807
+ });
808
+ });
809
+ });
810
+ });
811
+ describe('with expanded attribute on two headers', function () {
812
+ beforeEach(async function () {
813
+ element = await createFixture(html `
814
+ <pf-accordion>
815
+ <pf-accordion-header data-index="0" expanded><h2>h</h2></pf-accordion-header>
816
+ <pf-accordion-panel data-index="0"><p>p</p></pf-accordion-panel>
817
+ <pf-accordion-header data-index="1" expanded><h2>h</h2></pf-accordion-header>
818
+ <pf-accordion-panel data-index="1"><p>p</p></pf-accordion-panel>
819
+ <pf-accordion-header data-index="2"><h2>h</h2></pf-accordion-header>
820
+ <pf-accordion-panel data-index="2"><p>p</p></pf-accordion-panel>
821
+ </pf-accordion>
822
+ `);
823
+ headers = Array.from(element.querySelectorAll('pf-accordion-header'));
824
+ panels = Array.from(element.querySelectorAll('pf-accordion-panel'));
825
+ [header, secondHeader] = headers;
826
+ [panel, secondPanel] = panels;
827
+ await allUpdates(element);
828
+ });
829
+ it('expands the first panel', function () {
830
+ expect(panel).to.have.attribute('expanded');
831
+ });
832
+ it('expands the second panel', function () {
833
+ expect(secondPanel).to.have.attribute('expanded');
834
+ });
835
+ it('hides the third panel', function () {
836
+ expect(panels[2]).to.not.have.attribute('expanded');
837
+ });
838
+ });
839
+ describe('with single attribute and expanded attribute on two headers', function () {
840
+ beforeEach(async function () {
841
+ element = await createFixture(html `
842
+ <pf-accordion single>
843
+ <pf-accordion-header data-index="0" expanded><h2>h</h2></pf-accordion-header>
844
+ <pf-accordion-panel data-index="0"><p>p</p></pf-accordion-panel>
845
+ <pf-accordion-header data-index="1" expanded><h2>h</h2></pf-accordion-header>
846
+ <pf-accordion-panel data-index="1"><p>p</p></pf-accordion-panel>
847
+ <pf-accordion-header data-index="2"><h2>h</h2></pf-accordion-header>
848
+ <pf-accordion-panel data-index="2"><p>p</p></pf-accordion-panel>
849
+ </pf-accordion>
850
+ `);
851
+ headers = Array.from(element.querySelectorAll('pf-accordion-header'));
852
+ panels = Array.from(element.querySelectorAll('pf-accordion-panel'));
853
+ [header, secondHeader] = headers;
854
+ [panel, secondPanel] = panels;
855
+ await allUpdates(element);
856
+ await aTimeout(100);
857
+ });
858
+ it('hides the first panel', function () {
859
+ expect(panel).to.not.have.attribute('expanded');
860
+ });
861
+ it('expands the second panel', function () {
862
+ expect(secondPanel).to.have.attribute('expanded');
863
+ });
864
+ it('hides the third panel', function () {
865
+ expect(panels[2]).to.not.have.attribute('expanded');
866
+ });
867
+ });
868
+ describe('with no h* tag in heading lightdom', function () {
869
+ beforeEach(async function () {
870
+ element = await createFixture(html `
871
+ <pf-accordion id="badHeader">
872
+ <pf-accordion-header id="bad-header-element">
873
+ Bad Header
874
+ </pf-accordion-header>
875
+ <pf-accordion-panel>
876
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
877
+ </pf-accordion-panel>
878
+ </pf-accordion>`);
879
+ await allUpdates(element);
880
+ });
881
+ /* CONSOLE VALIDATION */
882
+ it('should warning in the console', function () {
883
+ expect(Logger.warn)
884
+ .to.have.been.calledOnceWith(`[pf-accordion-header#bad-header-element]`, 'Header should contain at least 1 heading tag for correct semantics.');
885
+ });
886
+ });
887
+ describe('with nested pf-accordion', function () {
888
+ let topLevelHeaderOne;
889
+ let topLevelHeaderTwo;
890
+ let topLevelHeaderThree;
891
+ let topLevelPanelOne;
892
+ let topLevelPanelTwo;
893
+ let nestedHeaderOne;
894
+ let nestedHeaderTwo;
895
+ let nestedHeaderThree;
896
+ let nestedPanelOne;
897
+ let nestedPanelTwo;
898
+ let nestedPanelThree;
899
+ beforeEach(async function () {
900
+ element = await createFixture(html `
901
+ <pf-accordion>
902
+ <pf-accordion-header id="header-1" data-index="0"></pf-accordion-header>
903
+ <pf-accordion-panel id="panel-1" data-index="0">
904
+ <pf-accordion>
905
+ <pf-accordion-header id="header-1-1" data-index="0-1"></pf-accordion-header>
906
+ <pf-accordion-panel id="panel-1-1" data-index="0-1"></pf-accordion-panel>
907
+ </pf-accordion>
908
+ </pf-accordion-panel>
909
+ <pf-accordion-header id="header-2" data-index="2"></pf-accordion-header>
910
+ <pf-accordion-panel id="panel-2" data-panel="2">
911
+ <pf-accordion single>
912
+ <pf-accordion-header id="header-2-1" data-index="1-0"></pf-accordion-header>
913
+ <pf-accordion-panel id="panel-2-1" data-index="1-0"></pf-accordion-panel>
914
+ <pf-accordion-header id="header-2-2" data-index="1-1"></pf-accordion-header>
915
+ <pf-accordion-panel id="panel-2-2" data-index="1-1"></pf-accordion-panel>
916
+ <pf-accordion-header id="header-2-3" data-index="1-2"></pf-accordion-header>
917
+ <pf-accordion-panel id="panel-2-3" data-index="1-2"></pf-accordion-panel>
918
+ </pf-accordion>
919
+ </pf-accordion-panel>
920
+
921
+ <pf-accordion-header id="header-3" data-index="2"></pf-accordion-header>
922
+ <pf-accordion-panel id="panel-3" data-index="2"></pf-accordion-panel>
923
+ </pf-accordion>
924
+ `);
925
+ topLevelHeaderOne = document.getElementById('header-1');
926
+ topLevelHeaderTwo = document.getElementById('header-2');
927
+ topLevelHeaderThree = document.getElementById('header-3');
928
+ topLevelPanelOne = document.getElementById('panel-1');
929
+ topLevelPanelTwo = document.getElementById('panel-2');
930
+ nestedHeaderOne = document.getElementById('header-2-1');
931
+ nestedHeaderTwo = document.getElementById('header-2-2');
932
+ nestedHeaderThree = document.getElementById('header-2-3');
933
+ nestedPanelOne = document.getElementById('panel-2-1');
934
+ nestedPanelTwo = document.getElementById('panel-2-2');
935
+ nestedPanelThree = document.getElementById('panel-2-3');
936
+ await allUpdates(element);
937
+ });
938
+ describe('clicking the first top-level heading', function () {
939
+ beforeEach(async function () {
940
+ topLevelHeaderOne.click();
941
+ await allUpdates(element);
942
+ });
943
+ describe('then clicking the second top-level heading', function () {
944
+ beforeEach(async function () {
945
+ topLevelHeaderTwo.click();
946
+ await allUpdates(element);
947
+ });
948
+ describe('then clicking the first nested heading', function () {
949
+ beforeEach(async function () {
950
+ nestedHeaderOne.click();
951
+ await allUpdates(element);
952
+ });
953
+ describe('then clicking the second nested heading', function () {
954
+ beforeEach(async function () {
955
+ nestedHeaderTwo.click();
956
+ await allUpdates(element);
957
+ });
958
+ it('expands the first top-level pair', function () {
959
+ expect(topLevelHeaderOne.shadowRoot.querySelector('button')?.getAttribute('aria-expanded'), 'top level header 1 button aria-expanded attr').to.equal('true');
960
+ expect(topLevelHeaderOne.expanded, 'top level header 1 expanded DOM property').to.be.true;
961
+ expect(topLevelPanelOne.hasAttribute('expanded'), 'top level panel 1 expanded attr').to.be.true;
962
+ expect(topLevelPanelOne.expanded, 'top level panel 1 DOM property').to.be.true;
963
+ });
964
+ it('collapses the second top-level pair', function () {
965
+ expect(topLevelHeaderTwo.shadowRoot.querySelector('button')?.getAttribute('aria-expanded'), 'top level header 2 button aria-expanded attr').to.equal('true');
966
+ expect(topLevelHeaderTwo.expanded, 'top level header 2 expanded DOM property').to.be.true;
967
+ expect(topLevelPanelTwo.hasAttribute('expanded'), 'top level panel 2 expanded attr').to.be.true;
968
+ expect(topLevelPanelTwo.expanded, 'top level panel 2 expanded DOM property').to.be.true;
969
+ });
970
+ it('collapses the first nested pair', function () {
971
+ expect(nestedHeaderOne.shadowRoot.querySelector('button')?.getAttribute('aria-expanded'), 'nested header 1 button aria-expanded attr').to.equal('false');
972
+ expect(nestedHeaderOne.expanded, 'nested header 1 expanded DOM property').to.be.false;
973
+ expect(nestedPanelOne.hasAttribute('expanded'), 'nested panel 1 expanded attr').to.be.false;
974
+ expect(nestedPanelOne.expanded, 'nested panel 1 expanded DOM property').to.be.false;
975
+ });
976
+ it('collapses the second nested pair', function () {
977
+ expect(nestedHeaderTwo.shadowRoot.querySelector('button')?.getAttribute('aria-expanded'), 'nested header 2 button aria-expanded attr').to.equal('true');
978
+ expect(nestedHeaderTwo.expanded, 'nested header 2 expanded DOM property').to.be.true;
979
+ expect(nestedPanelTwo.hasAttribute('expanded'), 'nested panel 2 expanded attr').to.be.true;
980
+ expect(nestedPanelTwo.expanded, 'nested panel 2 expanded DOM property').to.be.true;
981
+ });
982
+ });
983
+ });
984
+ });
985
+ });
986
+ describe('for assistive technology', function () {
987
+ describe('with all panels closed', function () {
988
+ it('applies hidden attribute to all panels', function () {
989
+ expect(topLevelPanelOne.hidden, 'panel-1').to.be.true;
990
+ expect(topLevelPanelTwo.hidden, 'panel-2').to.be.true;
991
+ expect(nestedPanelOne.hidden, 'panel-1-1').to.be.true;
992
+ expect(nestedPanelTwo.hidden, 'panel-2-2').to.be.true;
993
+ expect(nestedPanelThree.hidden, 'panel-2-3').to.be.true;
994
+ });
995
+ });
996
+ describe('with all panels open', function () {
997
+ beforeEach(async function () {
998
+ for (const header of element.querySelectorAll('pf-accordion-header')) {
999
+ header.click();
1000
+ }
1001
+ await nextFrame();
1002
+ });
1003
+ it('removes hidden attribute from all panels', function () {
1004
+ expect(topLevelPanelOne.hidden, 'panel-1').to.be.false;
1005
+ expect(topLevelPanelTwo.hidden, 'panel-2').to.be.false;
1006
+ expect(nestedPanelOne.hidden, 'panel-1-1').to.be.false;
1007
+ expect(nestedPanelTwo.hidden, 'panel-2-2').to.be.false;
1008
+ expect(nestedPanelThree.hidden, 'panel-2-3').to.be.false;
1009
+ });
1010
+ });
1011
+ describe('when focus is on the first header of the parent accordion', function () {
1012
+ beforeEach(async function () {
1013
+ topLevelHeaderOne.focus();
1014
+ await nextFrame();
1015
+ });
1016
+ describe('Space', function () {
1017
+ beforeEach(press(' '));
1018
+ it('expands the first panel', function () {
1019
+ expect(topLevelPanelOne.expanded).to.be.true;
1020
+ expect(topLevelPanelTwo.expanded).to.be.false;
1021
+ expect(nestedPanelOne.expanded).to.be.false;
1022
+ expect(nestedPanelTwo.expanded).to.be.false;
1023
+ });
1024
+ it('removes hidden attribute from the first panel', function () {
1025
+ expect(topLevelPanelOne.hidden, 'panel-1').to.be.false;
1026
+ expect(topLevelPanelTwo.hidden, 'panel-2').to.be.true;
1027
+ expect(nestedPanelOne.hidden, 'panel-1-1').to.be.true;
1028
+ expect(nestedPanelTwo.hidden, 'panel-2-2').to.be.true;
1029
+ });
1030
+ });
1031
+ describe('Tab', function () {
1032
+ beforeEach(press('Tab'));
1033
+ it('moves focus to the body', function () {
1034
+ expect(document.activeElement).to.equal(document.body);
1035
+ });
1036
+ });
1037
+ });
1038
+ describe('when focus is on the last header of the parent accordion', function () {
1039
+ beforeEach(async function () {
1040
+ topLevelHeaderTwo.focus();
1041
+ await nextFrame();
1042
+ });
1043
+ describe('Space', function () {
1044
+ beforeEach(press(' '));
1045
+ it('expands the first panel', function () {
1046
+ expect(topLevelPanelOne.expanded).to.be.false;
1047
+ expect(topLevelPanelTwo.expanded).to.be.true;
1048
+ expect(nestedPanelOne.expanded).to.be.false;
1049
+ expect(nestedPanelTwo.expanded).to.be.false;
1050
+ });
1051
+ it('removes hidden attribute from the first panel', function () {
1052
+ expect(topLevelPanelOne.hidden, 'panel-2').to.be.true;
1053
+ expect(topLevelPanelTwo.hidden, 'panel-1').to.be.false;
1054
+ expect(nestedPanelOne.hidden, 'panel-1-1').to.be.true;
1055
+ expect(nestedPanelTwo.hidden, 'panel-2-2').to.be.true;
1056
+ });
1057
+ });
1058
+ describe('Navigating from parent to child accordion', function () {
1059
+ describe('Opening the panel containing the nested accordion and pressing TAB', function () {
1060
+ beforeEach(press('Space'));
1061
+ beforeEach(press('Tab'));
1062
+ it('moves focus to the nested accordion header', function () {
1063
+ expect(document.activeElement).to.equal(nestedHeaderOne);
1064
+ });
1065
+ describe('ArrowUp', function () {
1066
+ beforeEach(press('ArrowUp'));
1067
+ it('moves focus to the last header', function () {
1068
+ expect(document.activeElement).to.equal(nestedHeaderThree);
1069
+ });
1070
+ });
1071
+ describe('ArrowLeft', function () {
1072
+ beforeEach(press('ArrowLeft'));
1073
+ it('moves focus to the last header', function () {
1074
+ expect(document.activeElement).to.equal(nestedHeaderThree);
1075
+ });
1076
+ });
1077
+ describe('ArrowDown', function () {
1078
+ beforeEach(press('ArrowDown'));
1079
+ it('moves focus to the second header', function () {
1080
+ expect(document.activeElement).to.equal(nestedHeaderTwo);
1081
+ });
1082
+ });
1083
+ describe('ArrowRight', function () {
1084
+ beforeEach(press('ArrowRight'));
1085
+ it('moves focus to the second header', function () {
1086
+ expect(document.activeElement).to.equal(nestedHeaderTwo);
1087
+ });
1088
+ });
1089
+ describe('Tab', function () {
1090
+ beforeEach(press('Tab'));
1091
+ it('should move focus back to the body', function () {
1092
+ expect(document.activeElement).to.equal(document.body);
1093
+ });
1094
+ });
1095
+ });
1096
+ });
1097
+ });
1098
+ });
1099
+ });
1100
+ describe('with multiple pf-accordion', function () {
1101
+ let multipleAccordionElements;
1102
+ let accordionOneHeaderOne;
1103
+ let accordionOnePanelOne;
1104
+ let accordionTwoHeaderOne;
1105
+ let accordionTwoPanelOne;
1106
+ beforeEach(async function () {
1107
+ multipleAccordionElements = await createFixture(html `
1108
+ <div>
1109
+ <pf-accordion>
1110
+ <pf-accordion-header id="header-1-1" data-index="0"></pf-accordion-header>
1111
+ <pf-accordion-panel id="panel-1-1" data-index="0"></pf-accordion-panel>
1112
+ </pf-accordion>
1113
+ <pf-accordion>
1114
+ <pf-accordion-header id="header-2-1" data-index="0"></pf-accordion-header>
1115
+ <pf-accordion-panel id="panel-2-1" data-index="0"></pf-accordion-panel>
1116
+ </pf-accordion>
1117
+ </div>
1118
+ `);
1119
+ accordionOneHeaderOne = document.getElementById('header-1-1');
1120
+ accordionOnePanelOne = document.getElementById('panel-1-1');
1121
+ accordionTwoHeaderOne = document.getElementById('header-2-1');
1122
+ accordionTwoPanelOne = document.getElementById('panel-2-1');
1123
+ });
1124
+ describe('for assistive technology', function () {
1125
+ describe('with all panels closed', function () {
1126
+ it('applies hidden attribute to all panels', function () {
1127
+ expect(accordionOnePanelOne.hidden, 'panel-1-1').to.be.true;
1128
+ expect(accordionTwoPanelOne.hidden, 'panel-2-1').to.be.true;
1129
+ });
1130
+ });
1131
+ describe('with all panels open', function () {
1132
+ beforeEach(async function () {
1133
+ for (const header of multipleAccordionElements.querySelectorAll('pf-accordion-header')) {
1134
+ header.click();
1135
+ }
1136
+ await nextFrame();
1137
+ });
1138
+ it('removes hidden attribute from all panels', function () {
1139
+ expect(accordionOnePanelOne.hidden, 'panel-1-1').to.be.false;
1140
+ expect(accordionTwoPanelOne.hidden, 'panel-2-1').to.be.false;
1141
+ });
1142
+ });
1143
+ describe('when focus is on the first header of the first accordion', function () {
1144
+ beforeEach(async function () {
1145
+ accordionOneHeaderOne.focus();
1146
+ await nextFrame();
1147
+ });
1148
+ describe('Space', function () {
1149
+ beforeEach(press(' '));
1150
+ it('expands the first panel', function () {
1151
+ expect(accordionOnePanelOne.expanded).to.be.true;
1152
+ expect(accordionTwoPanelOne.expanded).to.be.false;
1153
+ });
1154
+ it('removes hidden attribute from the first panel', function () {
1155
+ expect(accordionOnePanelOne.hidden, 'panel-1-1').to.be.false;
1156
+ expect(accordionTwoPanelOne.hidden, 'panel-1-1').to.be.true;
1157
+ });
1158
+ });
1159
+ describe('Tab', function () {
1160
+ beforeEach(press('Tab'));
1161
+ it('moves focus to the second accordion', function () {
1162
+ expect(document.activeElement).to.equal(accordionTwoHeaderOne);
1163
+ });
1164
+ describe('Shift+Tab', function () {
1165
+ beforeEach(press('Shift+Tab'));
1166
+ it('moves focus back to the first accordion', function () {
1167
+ expect(document.activeElement).to.equal(accordionOneHeaderOne);
1168
+ });
1169
+ });
1170
+ });
1171
+ });
1172
+ });
1173
+ });
1174
+ describe('with a single expanded header and panel containing a checkbox and a switch', function () {
1175
+ let element;
1176
+ let headers;
1177
+ let panels;
1178
+ let checkbox;
1179
+ let pfswitch;
1180
+ let accordionPanelOne;
1181
+ beforeEach(async function () {
1182
+ element = await createFixture(html `
1183
+ <pf-accordion>
1184
+ <pf-accordion-header expanded id="header-1-1" data-index="0"></pf-accordion-header>
1185
+ <pf-accordion-panel id="panel-1-1" data-index="0">
1186
+ <pf-switch></pf-switch>
1187
+ <input type="checkbox">
1188
+ </pf-accordion-panel>
1189
+ </pf-accordion>
1190
+ `);
1191
+ headers = document.querySelectorAll('pf-accordion-header');
1192
+ panels = document.querySelectorAll('pf-accordion-panel');
1193
+ checkbox = element.querySelector('input');
1194
+ pfswitch = element.querySelector('pf-switch');
1195
+ expect(checkbox).to.be.ok;
1196
+ expect(pfswitch).to.be.ok;
1197
+ [accordionPanelOne] = panels;
1198
+ });
1199
+ describe('clicking the checkbox', function () {
1200
+ beforeEach(async function () {
1201
+ checkbox.click();
1202
+ await element.updateComplete;
1203
+ });
1204
+ it('does not collapse the panel', function () {
1205
+ expect(accordionPanelOne.expanded).to.be.true;
1206
+ });
1207
+ });
1208
+ describe('clicking the switch', function () {
1209
+ beforeEach(async function () {
1210
+ const { checked } = pfswitch;
1211
+ pfswitch.click();
1212
+ await element.updateComplete;
1213
+ await pfswitch.updateComplete;
1214
+ expect(pfswitch.checked).to.not.equal(checked);
1215
+ });
1216
+ it('does not collapse the panel', function () {
1217
+ expect(accordionPanelOne.expanded).to.be.true;
1218
+ });
1219
+ });
1220
+ });
1221
+ });
1222
+ //# sourceMappingURL=pf-accordion.spec.js.map