@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
@@ -8,13 +8,10 @@ export declare class PfDropdownSelectEvent extends Event {
8
8
  /**
9
9
  * A **dropdown** presents a menu of actions or links in a constrained space that
10
10
  * will trigger a process or navigate to a new location.
11
- *
12
11
  * @slot - Must contain one or more `<pf-dropdown-item>` or `<pf-dropdown-group>`
13
12
  * @slot toggle - Custom toggle button
14
13
  * @slot menu - when using a custom toggle, you must slot a `<pf-dropdown-menu>` in alongside it
15
- *
16
14
  * @csspart menu - The dropdown menu wrapper
17
- *
18
15
  * @cssprop {<length>} --pf-c-dropdown__menu--PaddingTop
19
16
  * Dropdown top padding
20
17
  * {@default `0.5rem`}
@@ -30,7 +27,6 @@ export declare class PfDropdownSelectEvent extends Event {
30
27
  * @cssprop {<length>} --pf-c-dropdown__menu--Top
31
28
  * Dropdown top
32
29
  * {@default `100% + 0.25rem`}
33
- *
34
30
  * @fires {PfDropdownSelectEvent} select - when a user select dropdown value
35
31
  * @fires open - when the dropdown toggles open
36
32
  * @fires close - when the dropdown toggles closed
@@ -38,7 +34,13 @@ export declare class PfDropdownSelectEvent extends Event {
38
34
  export declare class PfDropdown extends LitElement {
39
35
  #private;
40
36
  static readonly styles: CSSStyleSheet[];
41
- static readonly shadowRootOptions: ShadowRootInit;
37
+ static readonly shadowRootOptions: {
38
+ delegatesFocus: boolean;
39
+ mode: ShadowRootMode;
40
+ slotAssignment?: SlotAssignmentMode | undefined;
41
+ customElements?: CustomElementRegistry | undefined;
42
+ registry?: CustomElementRegistry | undefined;
43
+ };
42
44
  /**
43
45
  * When disabled, the dropdown can still be toggled open and closed via keyboard, but menu items cannot be activated.
44
46
  */
@@ -52,7 +54,7 @@ export declare class PfDropdown extends LitElement {
52
54
  private ctx;
53
55
  protected getUpdateComplete(): Promise<boolean>;
54
56
  willUpdate(changed: PropertyValues): void;
55
- render(): import("lit").TemplateResult<1>;
57
+ render(): import("lit-html").TemplateResult<1>;
56
58
  firstUpdated(): void;
57
59
  updated(changed: PropertyValues<this>): void;
58
60
  /**
@@ -26,13 +26,10 @@ export class PfDropdownSelectEvent extends Event {
26
26
  /**
27
27
  * A **dropdown** presents a menu of actions or links in a constrained space that
28
28
  * will trigger a process or navigate to a new location.
29
- *
30
29
  * @slot - Must contain one or more `<pf-dropdown-item>` or `<pf-dropdown-group>`
31
30
  * @slot toggle - Custom toggle button
32
31
  * @slot menu - when using a custom toggle, you must slot a `<pf-dropdown-menu>` in alongside it
33
- *
34
32
  * @csspart menu - The dropdown menu wrapper
35
- *
36
33
  * @cssprop {<length>} --pf-c-dropdown__menu--PaddingTop
37
34
  * Dropdown top padding
38
35
  * {@default `0.5rem`}
@@ -48,7 +45,6 @@ export class PfDropdownSelectEvent extends Event {
48
45
  * @cssprop {<length>} --pf-c-dropdown__menu--Top
49
46
  * Dropdown top
50
47
  * {@default `100% + 0.25rem`}
51
- *
52
48
  * @fires {PfDropdownSelectEvent} select - when a user select dropdown value
53
49
  * @fires open - when the dropdown toggles open
54
50
  * @fires close - when the dropdown toggles closed
@@ -158,7 +154,8 @@ _PfDropdown_validateDOM = function _PfDropdown_validateDOM() {
158
154
  __classPrivateFieldGet(this, _PfDropdown_logger, "f").warn('no menu found');
159
155
  return false;
160
156
  }
161
- else if (![toggle, menu].map(x => this.shadowRoot?.contains(x)).every((p, _, a) => p === a[0])) {
157
+ else if (![toggle, menu].map(x => this.shadowRoot?.contains(x))
158
+ .every((p, _, a) => p === a[0])) {
162
159
  __classPrivateFieldGet(this, _PfDropdown_logger, "f").warn('toggle and menu must be located in the same root');
163
160
  return false;
164
161
  }
@@ -217,11 +214,11 @@ _PfDropdown_onMenuFocusout = function _PfDropdown_onMenuFocusout(event) {
217
214
  if (this.expanded) {
218
215
  const root = this.getRootNode();
219
216
  const [menu] = this._menuElements;
220
- if (root instanceof ShadowRoot ||
221
- root instanceof Document &&
222
- event.relatedTarget instanceof PfDropdownItem &&
223
- menu instanceof PfDropdownMenu &&
224
- !menu.items.includes(event.relatedTarget)) {
217
+ if (root instanceof ShadowRoot
218
+ || root instanceof Document
219
+ && event.relatedTarget instanceof PfDropdownItem
220
+ && menu instanceof PfDropdownMenu
221
+ && !menu.items.includes(event.relatedTarget)) {
225
222
  this.hide();
226
223
  }
227
224
  }
@@ -239,7 +236,10 @@ _PfDropdown_onMenuKeydown = function _PfDropdown_onMenuKeydown(event) {
239
236
  }
240
237
  };
241
238
  PfDropdown.styles = [styles];
242
- PfDropdown.shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true };
239
+ PfDropdown.shadowRootOptions = {
240
+ ...LitElement.shadowRootOptions,
241
+ delegatesFocus: true,
242
+ };
243
243
  __decorate([
244
244
  property({ type: Boolean, reflect: true })
245
245
  ], PfDropdown.prototype, "disabled", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"pf-dropdown.js","sourceRoot":"","sources":["pf-dropdown.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, type PropertyValues } from 'lit';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\nimport { queryAssignedElements } from 'lit/decorators/query-assigned-elements.js';\nimport { provide } from '@lit/context';\n\nimport { FloatingDOMController } from '@patternfly/pfe-core/controllers/floating-dom-controller.js';\nimport { Logger } from '@patternfly/pfe-core/controllers/logger.js';\nimport { getRandomId } from '@patternfly/pfe-core/functions/random.js';\n\nimport { context, type PfDropdownContext } from './context.js';\nimport { PfDropdownItem } from './pf-dropdown-item.js';\nimport { PfDropdownMenu } from './pf-dropdown-menu.js';\n\nimport '@patternfly/elements/pf-button/pf-button.js';\n\nimport styles from './pf-dropdown.css';\n\n\nexport class PfDropdownSelectEvent extends Event {\n constructor(\n public originalEvent: Event | KeyboardEvent,\n public value: string\n ) {\n super('select', { bubbles: true, cancelable: true });\n }\n}\n\n/**\n * A **dropdown** presents a menu of actions or links in a constrained space that\n * will trigger a process or navigate to a new location.\n *\n * @slot - Must contain one or more `<pf-dropdown-item>` or `<pf-dropdown-group>`\n * @slot toggle - Custom toggle button\n * @slot menu - when using a custom toggle, you must slot a `<pf-dropdown-menu>` in alongside it\n *\n * @csspart menu - The dropdown menu wrapper\n *\n * @cssprop {<length>} --pf-c-dropdown__menu--PaddingTop\n * Dropdown top padding\n * {@default `0.5rem`}\n * @cssprop {<length>} --pf-c-tooltip__content--PaddingRight\n * Dropdown right padding\n * {@default `0.5rem`}\n * @cssprop {<length>} --pf-c-dropdown__menu--ZIndex\n * Dropdown z-index\n * {@default `200`}\n * @cssprop --pf-c-dropdown__menu--BoxShadow\n * Dropdown box shadow\n * {@default `0 0.25rem 0.5rem 0rem rgba(3, 3, 3, 0.12), 0 0 0.25rem 0 rgba(3, 3, 3, 0.06)`}\n * @cssprop {<length>} --pf-c-dropdown__menu--Top\n * Dropdown top\n * {@default `100% + 0.25rem`}\n *\n * @fires {PfDropdownSelectEvent} select - when a user select dropdown value\n * @fires open - when the dropdown toggles open\n * @fires close - when the dropdown toggles closed\n */\n@customElement('pf-dropdown')\nexport class PfDropdown extends LitElement {\n static readonly styles = [styles];\n\n static override readonly shadowRootOptions: ShadowRootInit = { ...LitElement.shadowRootOptions, delegatesFocus: true };\n\n /**\n * When disabled, the dropdown can still be toggled open and closed via keyboard, but menu items cannot be activated.\n */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /**\n * Whether the dropdown is expanded\n */\n @property({ type: Boolean, reflect: true }) expanded = false;\n\n @queryAssignedElements({ slot: 'toggle', flatten: true })\n private _toggleElements!: HTMLElement[];\n\n @queryAssignedElements({ slot: 'menu', flatten: true })\n private _menuElements!: HTMLElement[];\n\n @provide({ context }) private ctx: PfDropdownContext = { disabled: false };\n\n #logger = new Logger(this);\n\n #float = new FloatingDOMController(this, {\n content: () => this._menuElements?.at(0),\n });\n\n protected override async getUpdateComplete(): Promise<boolean> {\n const ps = await Promise.all([\n super.getUpdateComplete(),\n this._menuElements?.map(x => (x as LitElement).updateComplete),\n ]);\n return ps.every(x=>!!x);\n }\n\n willUpdate(changed: PropertyValues) {\n if (changed.has('disabled')) {\n const { disabled } = this;\n this.ctx = { disabled };\n }\n }\n\n render() {\n const { expanded } = this;\n const { anchor, alignment, styles = {} } = this.#float;\n const { disabled } = this;\n return html`\n <div class=\"${classMap({ disabled,\n expanded,\n [anchor ?? '']: !!anchor,\n [alignment ?? '']: !!alignment })}\"\n style=\"${styleMap(styles)}\"\n @slotchange=\"${this.#onSlotchange}\">\n <slot name=\"toggle\"\n @keydown=\"${this.#onButtonKeydown}\"\n @click=\"${() => this.toggle()}\">\n <pf-button id=\"default-toggle\" variant=\"control\">\n Dropdown\n <pf-icon icon=\"caret-down\" size=\"md\"></pf-icon>\n </pf-button>\n </slot>\n <slot name=\"menu\"\n ?hidden=\"${!this.expanded}\"\n @focusout=\"${this.#onMenuFocusout}\"\n @keydown=\"${this.#onMenuKeydown}\"\n @click=\"${this.#onSelect}\">\n <pf-dropdown-menu id=\"menu\" part=\"menu\" ?disabled=\"${disabled}\">\n <slot></slot>\n </pf-dropdown-menu>\n </slot>\n </div>`;\n }\n\n override firstUpdated() {\n this.#onSlotchange();\n }\n\n updated(changed: PropertyValues<this>) {\n if (changed.has('expanded')) {\n this.#expandedChanged();\n }\n if (changed.has('disabled')) {\n this.#disabledChanged();\n }\n }\n\n #validateDOM() {\n const [toggle] = this._toggleElements;\n const [menu] = this._menuElements;\n if (!toggle) {\n this.#logger.warn('no toggle found');\n return false;\n } else if (!menu) {\n this.#logger.warn('no menu found');\n return false;\n } else if (![toggle, menu].map(x => this.shadowRoot?.contains(x)).every((p, _, a) => p === a[0])) {\n this.#logger.warn('toggle and menu must be located in the same root');\n return false;\n } else {\n return true;\n }\n }\n\n #onSlotchange() {\n if (this.#validateDOM()) {\n const [menu] = this._menuElements;\n const [toggle] = this._toggleElements;\n menu.id ||= getRandomId('menu');\n toggle.setAttribute('aria-controls', menu.id);\n toggle.setAttribute('aria-haspopup', menu.id);\n toggle.setAttribute('aria-expanded', String(this.expanded) as 'true' | 'false');\n }\n }\n\n async #expandedChanged() {\n const will = this.expanded ? 'close' : 'open';\n const [menu] = this._menuElements;\n const [toggle] = this._toggleElements;\n toggle.setAttribute('aria-expanded', `${String(this.expanded) as 'true' | 'false'}`);\n this.dispatchEvent(new Event(will));\n if (this.expanded) {\n await this.#float.show();\n if (menu instanceof PfDropdownMenu) {\n menu.activeItem?.focus();\n }\n } else {\n await this.#float.hide();\n }\n }\n\n #disabledChanged() {\n if (this.#validateDOM()) {\n const [toggle] = this._toggleElements;\n toggle.setAttribute('aria-disabled', String(!!this.disabled));\n }\n }\n\n #onSelect(event: KeyboardEvent | Event & { target: PfDropdownItem }) {\n const [menu] = this._menuElements;\n if (menu instanceof PfDropdownMenu) {\n const target = event.target as PfDropdownItem || menu.activeItem;\n this.dispatchEvent(new PfDropdownSelectEvent(event, `${target?.value}`));\n this.hide();\n }\n }\n\n #onButtonKeydown(event: KeyboardEvent) {\n switch (event.key) {\n case 'ArrowDown': {\n this.show();\n }\n }\n }\n\n #onMenuFocusout(event: FocusEvent) {\n if (this.expanded) {\n const root = this.getRootNode();\n const [menu] = this._menuElements;\n if (root instanceof ShadowRoot ||\n root instanceof Document &&\n event.relatedTarget instanceof PfDropdownItem &&\n menu instanceof PfDropdownMenu &&\n !menu.items.includes(event.relatedTarget)\n ) {\n this.hide();\n }\n }\n }\n\n #onMenuKeydown(event: KeyboardEvent) {\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.#onSelect(event);\n break;\n case 'Escape':\n this.hide();\n this._toggleElements?.at(0)?.focus();\n }\n }\n\n /**\n * Opens the dropdown\n */\n async show() {\n this.expanded = true;\n await this.updateComplete;\n }\n\n /**\n * Closes the dropdown\n */\n async hide() {\n this.expanded = false;\n await this.updateComplete;\n }\n\n async toggle() {\n this.expanded = !this.expanded;\n await this.updateComplete;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-dropdown': PfDropdown;\n }\n}\n"]}
1
+ {"version":3,"file":"pf-dropdown.js","sourceRoot":"","sources":["pf-dropdown.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, type PropertyValues } from 'lit';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\nimport { queryAssignedElements } from 'lit/decorators/query-assigned-elements.js';\nimport { provide } from '@lit/context';\n\nimport { FloatingDOMController } from '@patternfly/pfe-core/controllers/floating-dom-controller.js';\nimport { Logger } from '@patternfly/pfe-core/controllers/logger.js';\nimport { getRandomId } from '@patternfly/pfe-core/functions/random.js';\n\nimport { context, type PfDropdownContext } from './context.js';\nimport { PfDropdownItem } from './pf-dropdown-item.js';\nimport { PfDropdownMenu } from './pf-dropdown-menu.js';\n\nimport '@patternfly/elements/pf-button/pf-button.js';\n\nimport styles from './pf-dropdown.css';\n\n\nexport class PfDropdownSelectEvent extends Event {\n constructor(\n public originalEvent: Event | KeyboardEvent,\n public value: string\n ) {\n super('select', { bubbles: true, cancelable: true });\n }\n}\n\n/**\n * A **dropdown** presents a menu of actions or links in a constrained space that\n * will trigger a process or navigate to a new location.\n * @slot - Must contain one or more `<pf-dropdown-item>` or `<pf-dropdown-group>`\n * @slot toggle - Custom toggle button\n * @slot menu - when using a custom toggle, you must slot a `<pf-dropdown-menu>` in alongside it\n * @csspart menu - The dropdown menu wrapper\n * @cssprop {<length>} --pf-c-dropdown__menu--PaddingTop\n * Dropdown top padding\n * {@default `0.5rem`}\n * @cssprop {<length>} --pf-c-tooltip__content--PaddingRight\n * Dropdown right padding\n * {@default `0.5rem`}\n * @cssprop {<length>} --pf-c-dropdown__menu--ZIndex\n * Dropdown z-index\n * {@default `200`}\n * @cssprop --pf-c-dropdown__menu--BoxShadow\n * Dropdown box shadow\n * {@default `0 0.25rem 0.5rem 0rem rgba(3, 3, 3, 0.12), 0 0 0.25rem 0 rgba(3, 3, 3, 0.06)`}\n * @cssprop {<length>} --pf-c-dropdown__menu--Top\n * Dropdown top\n * {@default `100% + 0.25rem`}\n * @fires {PfDropdownSelectEvent} select - when a user select dropdown value\n * @fires open - when the dropdown toggles open\n * @fires close - when the dropdown toggles closed\n */\n@customElement('pf-dropdown')\nexport class PfDropdown extends LitElement {\n static readonly styles = [styles];\n\n static override readonly shadowRootOptions = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n\n /**\n * When disabled, the dropdown can still be toggled open and closed via keyboard, but menu items cannot be activated.\n */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /**\n * Whether the dropdown is expanded\n */\n @property({ type: Boolean, reflect: true }) expanded = false;\n\n @queryAssignedElements({ slot: 'toggle', flatten: true })\n private _toggleElements!: HTMLElement[];\n\n @queryAssignedElements({ slot: 'menu', flatten: true })\n private _menuElements!: HTMLElement[];\n\n @provide({ context }) private ctx: PfDropdownContext = { disabled: false };\n\n #logger = new Logger(this);\n\n #float = new FloatingDOMController(this, {\n content: () => this._menuElements?.at(0),\n });\n\n protected override async getUpdateComplete(): Promise<boolean> {\n const ps = await Promise.all([\n super.getUpdateComplete(),\n this._menuElements?.map(x => (x as LitElement).updateComplete),\n ]);\n return ps.every(x=>!!x);\n }\n\n willUpdate(changed: PropertyValues) {\n if (changed.has('disabled')) {\n const { disabled } = this;\n this.ctx = { disabled };\n }\n }\n\n render() {\n const { expanded } = this;\n const { anchor, alignment, styles = {} } = this.#float;\n const { disabled } = this;\n return html`\n <div class=\"${classMap({ disabled,\n expanded,\n [anchor ?? '']: !!anchor,\n [alignment ?? '']: !!alignment })}\"\n style=\"${styleMap(styles)}\"\n @slotchange=\"${this.#onSlotchange}\">\n <slot name=\"toggle\"\n @keydown=\"${this.#onButtonKeydown}\"\n @click=\"${() => this.toggle()}\">\n <pf-button id=\"default-toggle\" variant=\"control\">\n Dropdown\n <pf-icon icon=\"caret-down\" size=\"md\"></pf-icon>\n </pf-button>\n </slot>\n <slot name=\"menu\"\n ?hidden=\"${!this.expanded}\"\n @focusout=\"${this.#onMenuFocusout}\"\n @keydown=\"${this.#onMenuKeydown}\"\n @click=\"${this.#onSelect}\">\n <pf-dropdown-menu id=\"menu\" part=\"menu\" ?disabled=\"${disabled}\">\n <slot></slot>\n </pf-dropdown-menu>\n </slot>\n </div>`;\n }\n\n override firstUpdated() {\n this.#onSlotchange();\n }\n\n updated(changed: PropertyValues<this>) {\n if (changed.has('expanded')) {\n this.#expandedChanged();\n }\n if (changed.has('disabled')) {\n this.#disabledChanged();\n }\n }\n\n #validateDOM() {\n const [toggle] = this._toggleElements;\n const [menu] = this._menuElements;\n if (!toggle) {\n this.#logger.warn('no toggle found');\n return false;\n } else if (!menu) {\n this.#logger.warn('no menu found');\n return false;\n } else if (![toggle, menu].map(x => this.shadowRoot?.contains(x))\n .every((p, _, a) => p === a[0])) {\n this.#logger.warn('toggle and menu must be located in the same root');\n return false;\n } else {\n return true;\n }\n }\n\n #onSlotchange() {\n if (this.#validateDOM()) {\n const [menu] = this._menuElements;\n const [toggle] = this._toggleElements;\n menu.id ||= getRandomId('menu');\n toggle.setAttribute('aria-controls', menu.id);\n toggle.setAttribute('aria-haspopup', menu.id);\n toggle.setAttribute('aria-expanded', String(this.expanded) as 'true' | 'false');\n }\n }\n\n async #expandedChanged() {\n const will = this.expanded ? 'close' : 'open';\n const [menu] = this._menuElements;\n const [toggle] = this._toggleElements;\n toggle.setAttribute('aria-expanded', `${String(this.expanded) as 'true' | 'false'}`);\n this.dispatchEvent(new Event(will));\n if (this.expanded) {\n await this.#float.show();\n if (menu instanceof PfDropdownMenu) {\n menu.activeItem?.focus();\n }\n } else {\n await this.#float.hide();\n }\n }\n\n #disabledChanged() {\n if (this.#validateDOM()) {\n const [toggle] = this._toggleElements;\n toggle.setAttribute('aria-disabled', String(!!this.disabled));\n }\n }\n\n #onSelect(event: KeyboardEvent | Event & { target: PfDropdownItem }) {\n const [menu] = this._menuElements;\n if (menu instanceof PfDropdownMenu) {\n const target = event.target as PfDropdownItem || menu.activeItem;\n this.dispatchEvent(new PfDropdownSelectEvent(event, `${target?.value}`));\n this.hide();\n }\n }\n\n #onButtonKeydown(event: KeyboardEvent) {\n switch (event.key) {\n case 'ArrowDown': {\n this.show();\n }\n }\n }\n\n #onMenuFocusout(event: FocusEvent) {\n if (this.expanded) {\n const root = this.getRootNode();\n const [menu] = this._menuElements;\n if (root instanceof ShadowRoot\n || root instanceof Document\n && event.relatedTarget instanceof PfDropdownItem\n && menu instanceof PfDropdownMenu\n && !menu.items.includes(event.relatedTarget)\n ) {\n this.hide();\n }\n }\n }\n\n #onMenuKeydown(event: KeyboardEvent) {\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.#onSelect(event);\n break;\n case 'Escape':\n this.hide();\n this._toggleElements?.at(0)?.focus();\n }\n }\n\n /**\n * Opens the dropdown\n */\n async show() {\n this.expanded = true;\n await this.updateComplete;\n }\n\n /**\n * Closes the dropdown\n */\n async hide() {\n this.expanded = false;\n await this.updateComplete;\n }\n\n async toggle() {\n this.expanded = !this.expanded;\n await this.updateComplete;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-dropdown': PfDropdown;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ import { test } from '@playwright/test';
2
+ import { PfeDemoPage } from '@patternfly/pfe-tools/test/playwright/PfeDemoPage.js';
3
+ const tagName = 'pf-dropdown';
4
+ test.describe(tagName, () => {
5
+ test('snapshot', async ({ page }) => {
6
+ const componentPage = new PfeDemoPage(page, tagName);
7
+ await componentPage.navigate();
8
+ await componentPage.snapshot();
9
+ });
10
+ });
11
+ //# sourceMappingURL=pf-dropdown.e2e.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pf-dropdown.e2e.js","sourceRoot":"","sources":["pf-dropdown.e2e.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,sDAAsD,CAAC;AAEnF,MAAM,OAAO,GAAG,aAAa,CAAC;AAE9B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IAC1B,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QAClC,MAAM,aAAa,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { test } from '@playwright/test';\nimport { PfeDemoPage } from '@patternfly/pfe-tools/test/playwright/PfeDemoPage.js';\n\nconst tagName = 'pf-dropdown';\n\ntest.describe(tagName, () => {\n test('snapshot', async ({ page }) => {\n const componentPage = new PfeDemoPage(page, tagName);\n await componentPage.navigate();\n await componentPage.snapshot();\n });\n});\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,129 @@
1
+ import { expect, html } from '@open-wc/testing';
2
+ import { createFixture } from '@patternfly/pfe-tools/test/create-fixture.js';
3
+ import { sendKeys, resetMouse } from '@web/test-runner-commands';
4
+ import { clickElementAtCenter } from '@patternfly/pfe-tools/test/utils.js';
5
+ import { PfDropdown } from '@patternfly/elements/pf-dropdown/pf-dropdown.js';
6
+ import { a11ySnapshot } from '@patternfly/pfe-tools/test/a11y-snapshot.js';
7
+ function press(key) {
8
+ return async function () {
9
+ await sendKeys({ press: key });
10
+ };
11
+ }
12
+ describe('<pf-dropdown>', function () {
13
+ let element;
14
+ const updateComplete = () => element.updateComplete;
15
+ describe('simply instantiating', function () {
16
+ it('imperatively instantiates', function () {
17
+ expect(document.createElement('pf-dropdown')).to.be.an.instanceof(PfDropdown);
18
+ });
19
+ it('should upgrade', async function () {
20
+ element = await createFixture(html `<pf-dropdown></pf-dropdown>`);
21
+ const klass = customElements.get('pf-dropdown');
22
+ expect(element)
23
+ .to.be.an.instanceOf(klass)
24
+ .and
25
+ .to.be.an.instanceOf(PfDropdown);
26
+ });
27
+ });
28
+ describe('with default toggle button', function () {
29
+ beforeEach(async function () {
30
+ element = await createFixture(html `
31
+ <pf-dropdown>
32
+ <pf-dropdown-item>item 1</pf-dropdown-item>
33
+ <pf-dropdown-item>item 2</pf-dropdown-item>
34
+ </pf-dropdown>
35
+ `);
36
+ });
37
+ it('should be accessible', async function () {
38
+ await expect(element).to.be.accessible({
39
+ ignoredRules: [
40
+ /** @see https://github.com/dequelabs/axe-core/issues/4259 */
41
+ 'aria-allowed-attr',
42
+ /** false positive: the menuitem is projected into a menu in another shadow root */
43
+ 'aria-required-parent',
44
+ ],
45
+ });
46
+ });
47
+ it('should hide dropdown content from assistive technology', async function () {
48
+ const snapshot = await a11ySnapshot();
49
+ const menu = snapshot.children?.find(x => x.role === 'menu');
50
+ expect(menu).to.not.be.ok;
51
+ });
52
+ describe('pressing Enter', function () {
53
+ beforeEach(press('Tab'));
54
+ beforeEach(press('Enter'));
55
+ beforeEach(updateComplete);
56
+ it('should show menu', async function () {
57
+ const snapshot = await a11ySnapshot();
58
+ const menu = snapshot?.children?.find(x => x.role === 'menu');
59
+ expect(menu).to.be.ok;
60
+ expect(menu?.children?.length).to.equal(2);
61
+ });
62
+ it('should focus on first menu item', async function () {
63
+ const snapshot = await a11ySnapshot();
64
+ const menu = snapshot?.children?.find(x => x.role === 'menu');
65
+ const focused = menu?.children?.find(x => x.focused);
66
+ expect(focused).to.deep.equal({ role: 'menuitem', name: 'item 1', focused: true });
67
+ });
68
+ describe('pressing ArrowDown', function () {
69
+ beforeEach(async function () {
70
+ await sendKeys({ press: 'ArrowDown' });
71
+ await element.updateComplete;
72
+ });
73
+ it('should focus on secondc menu item', async function () {
74
+ const snapshot = await a11ySnapshot();
75
+ const menu = snapshot?.children?.find(x => x.role === 'menu');
76
+ const focused = menu?.children?.find(x => x.focused);
77
+ expect(focused).to.deep.equal({ role: 'menuitem', name: 'item 2', focused: true });
78
+ });
79
+ describe('pressing Escape', function () {
80
+ beforeEach(async function () {
81
+ await sendKeys({ press: 'Escape' });
82
+ });
83
+ it('should close menu', async function () {
84
+ const snapshot = await a11ySnapshot();
85
+ const menu = snapshot?.children?.find(x => x.role === 'menu');
86
+ expect(snapshot.children?.length).to.equal(1);
87
+ expect(menu).to.not.be.ok;
88
+ });
89
+ });
90
+ });
91
+ });
92
+ describe('disabled', function () {
93
+ beforeEach(async function () {
94
+ element.disabled = true;
95
+ await element.updateComplete;
96
+ });
97
+ it('should disable toggle button', async function () {
98
+ const snapshot = await a11ySnapshot();
99
+ expect(snapshot.children?.length).to.equal(1);
100
+ expect(snapshot.children?.at(0)?.disabled).to.be.true;
101
+ });
102
+ describe('pressing Enter', function () {
103
+ beforeEach(async function () {
104
+ await sendKeys({ press: 'Tab' });
105
+ await sendKeys({ press: 'Enter' });
106
+ });
107
+ it('should show menu', async function () {
108
+ const snapshot = await a11ySnapshot();
109
+ const menu = snapshot?.children?.find(x => x.role === 'menu');
110
+ expect(menu).to.be.ok;
111
+ expect(menu?.children?.length).to.equal(2);
112
+ });
113
+ });
114
+ describe('clicking toggle', function () {
115
+ beforeEach(async function () {
116
+ await clickElementAtCenter(element);
117
+ await resetMouse();
118
+ });
119
+ it('should show menu', async function () {
120
+ const snapshot = await a11ySnapshot();
121
+ const menu = snapshot?.children?.find(x => x.role === 'menu');
122
+ expect(menu).to.be.ok;
123
+ expect(menu?.children?.length).to.equal(2);
124
+ });
125
+ });
126
+ });
127
+ });
128
+ });
129
+ //# sourceMappingURL=pf-dropdown.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pf-dropdown.spec.js","sourceRoot":"","sources":["pf-dropdown.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, html } from '@open-wc/testing';\nimport { createFixture } from '@patternfly/pfe-tools/test/create-fixture.js';\nimport { sendKeys, resetMouse } from '@web/test-runner-commands';\nimport { clickElementAtCenter } from '@patternfly/pfe-tools/test/utils.js';\nimport { PfDropdown } from '@patternfly/elements/pf-dropdown/pf-dropdown.js';\nimport { a11ySnapshot } from '@patternfly/pfe-tools/test/a11y-snapshot.js';\n\nfunction press(key: string) {\n return async function() {\n await sendKeys({ press: key });\n };\n}\n\ndescribe('<pf-dropdown>', function() {\n let element: PfDropdown;\n\n const updateComplete = () => element.updateComplete;\n\n describe('simply instantiating', function() {\n it('imperatively instantiates', function() {\n expect(document.createElement('pf-dropdown')).to.be.an.instanceof(PfDropdown);\n });\n\n it('should upgrade', async function() {\n element = await createFixture<PfDropdown>(html`<pf-dropdown></pf-dropdown>`);\n const klass = customElements.get('pf-dropdown');\n expect(element)\n .to.be.an.instanceOf(klass)\n .and\n .to.be.an.instanceOf(PfDropdown);\n });\n });\n\n describe('with default toggle button', function() {\n beforeEach(async function() {\n element = await createFixture<PfDropdown>(html`\n <pf-dropdown>\n <pf-dropdown-item>item 1</pf-dropdown-item>\n <pf-dropdown-item>item 2</pf-dropdown-item>\n </pf-dropdown>\n `);\n });\n\n it('should be accessible', async function() {\n await expect(element).to.be.accessible({\n ignoredRules: [\n /** @see https://github.com/dequelabs/axe-core/issues/4259 */\n 'aria-allowed-attr',\n /** false positive: the menuitem is projected into a menu in another shadow root */\n 'aria-required-parent',\n ],\n });\n });\n\n it('should hide dropdown content from assistive technology', async function() {\n const snapshot = await a11ySnapshot();\n const menu = snapshot.children?.find(x => x.role === 'menu');\n expect(menu).to.not.be.ok;\n });\n\n describe('pressing Enter', function() {\n beforeEach(press('Tab'));\n beforeEach(press('Enter'));\n beforeEach(updateComplete);\n\n it('should show menu', async function() {\n const snapshot = await a11ySnapshot();\n const menu = snapshot?.children?.find(x => x.role === 'menu');\n expect(menu).to.be.ok;\n expect(menu?.children?.length).to.equal(2);\n });\n\n it('should focus on first menu item', async function() {\n const snapshot = await a11ySnapshot();\n const menu = snapshot?.children?.find(x => x.role === 'menu');\n const focused = menu?.children?.find(x => x.focused);\n expect(focused).to.deep.equal({ role: 'menuitem', name: 'item 1', focused: true });\n });\n\n describe('pressing ArrowDown', function() {\n beforeEach(async function() {\n await sendKeys({ press: 'ArrowDown' });\n await element.updateComplete;\n });\n\n it('should focus on secondc menu item', async function() {\n const snapshot = await a11ySnapshot();\n const menu = snapshot?.children?.find(x => x.role === 'menu');\n const focused = menu?.children?.find(x => x.focused);\n expect(focused).to.deep.equal({ role: 'menuitem', name: 'item 2', focused: true });\n });\n\n describe('pressing Escape', function() {\n beforeEach(async function() {\n await sendKeys({ press: 'Escape' });\n });\n\n it('should close menu', async function() {\n const snapshot = await a11ySnapshot();\n const menu = snapshot?.children?.find(x => x.role === 'menu');\n expect(snapshot.children?.length).to.equal(1);\n expect(menu).to.not.be.ok;\n });\n });\n });\n });\n\n describe('disabled', function() {\n beforeEach(async function() {\n element.disabled = true;\n await element.updateComplete;\n });\n\n it('should disable toggle button', async function() {\n const snapshot = await a11ySnapshot();\n expect(snapshot.children?.length).to.equal(1);\n expect(snapshot.children?.at(0)?.disabled).to.be.true;\n });\n\n describe('pressing Enter', function() {\n beforeEach(async function() {\n await sendKeys({ press: 'Tab' });\n await sendKeys({ press: 'Enter' });\n });\n\n it('should show menu', async function() {\n const snapshot = await a11ySnapshot();\n const menu = snapshot?.children?.find(x => x.role === 'menu');\n expect(menu).to.be.ok;\n expect(menu?.children?.length).to.equal(2);\n });\n });\n\n describe('clicking toggle', function() {\n beforeEach(async function() {\n await clickElementAtCenter(element);\n await resetMouse();\n });\n\n it('should show menu', async function() {\n const snapshot = await a11ySnapshot();\n const menu = snapshot?.children?.find(x => x.role === 'menu');\n expect(menu).to.be.ok;\n expect(menu?.children?.length).to.equal(2);\n });\n });\n });\n });\n});\n"]}
@@ -3,7 +3,6 @@ import { LitElement } from 'lit';
3
3
  export type URLGetter = (set: string, icon: string) => URL | string;
4
4
  /**
5
5
  * Icon component lazy-loads icons and allows custom icon sets
6
- *
7
6
  * @slot - Slotted content is used as a fallback in case the icon doesn't load
8
7
  * @fires load - Fired when an icon is loaded and rendered
9
8
  * @fires error - Fired when an icon fails to load
@@ -37,6 +36,6 @@ export declare abstract class BaseIcon extends LitElement {
37
36
  connectedCallback(): void;
38
37
  willUpdate(changed: PropertyValues<this>): void;
39
38
  disconnectedCallback(): void;
40
- render(): import("lit").TemplateResult<1>;
39
+ render(): import("lit-html").TemplateResult<1>;
41
40
  protected load(): Promise<void>;
42
41
  }
@@ -19,7 +19,6 @@ class IconLoadError extends ErrorEvent {
19
19
  }
20
20
  /**
21
21
  * Icon component lazy-loads icons and allows custom icon sets
22
- *
23
22
  * @slot - Slotted content is used as a fallback in case the icon doesn't load
24
23
  * @fires load - Fired when an icon is loaded and rendered
25
24
  * @fires error - Fired when an icon fails to load
@@ -68,16 +67,16 @@ export class BaseIcon extends LitElement {
68
67
  __classPrivateFieldGet(this, _BaseIcon_instances, "a", _BaseIcon_class_get).instances.delete(this);
69
68
  }
70
69
  render() {
71
- const content = this.content ?? ''; /* eslint-disable indent */
70
+ const content = this.content ?? '';
72
71
  return html `
73
72
  <div id="container" aria-hidden="true">${content}<span part="fallback" ?hidden=${!!content}>
74
73
  <slot></slot>
75
74
  </span>
76
75
  </div>
77
- `; /* eslint-enable indent */
76
+ `;
78
77
  }
79
78
  async load() {
80
- const { set, icon, } = this;
79
+ const { set, icon } = this;
81
80
  const getter = __classPrivateFieldGet(this, _BaseIcon_instances, "a", _BaseIcon_class_get).getters.get(set) ?? __classPrivateFieldGet(this, _BaseIcon_instances, "a", _BaseIcon_class_get).getIconUrl;
82
81
  let spec = 'UNKNOWN ICON';
83
82
  if (set && icon) {
@@ -1 +1 @@
1
- {"version":3,"file":"BaseIcon.js","sourceRoot":"","sources":["BaseIcon.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyValues } from 'lit';\n\nimport { LitElement, html } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { state } from 'lit/decorators/state.js';\nimport { Logger } from '@patternfly/pfe-core/controllers/logger.js';\n\nimport style from './BaseIcon.css';\n\nexport type URLGetter = (set: string, icon: string) => URL | string;\n\n/** requestIdleCallback when available, requestAnimationFrame when not */\nconst ric = window.requestIdleCallback ?? window.requestAnimationFrame;\n\n/** Fired when an icon fails to load */\nclass IconLoadError extends ErrorEvent {\n constructor(\n pathname: string,\n /** The original error when importing the icon module */\n public originalError: Error\n ) {\n super('error', { message: `Could not load icon at ${pathname}` });\n }\n}\n\n/**\n * Icon component lazy-loads icons and allows custom icon sets\n *\n * @slot - Slotted content is used as a fallback in case the icon doesn't load\n * @fires load - Fired when an icon is loaded and rendered\n * @fires error - Fired when an icon fails to load\n * @csspart fallback - Container for the fallback (i.e. slotted) content\n */\nexport abstract class BaseIcon extends LitElement {\n public static readonly styles = [style];\n\n public static addIconSet(setName: string, getter: typeof BaseIcon['getIconUrl']) {\n if (typeof getter !== 'function') {\n Logger.warn(`[${this.name}.addIconSet(setName, getter)]: getter must be a function`);\n } else {\n this.getters.set(setName, getter);\n for (const instance of this.instances) {\n instance.load();\n }\n }\n }\n\n public static getIconUrl: URLGetter = (set: string, icon: string) =>\n `@patternfly/icons/${set}/${icon}.js`;\n\n private static onIntersect: IntersectionObserverCallback = records =>\n records.forEach(({ isIntersecting, target }) => {\n const icon = target as BaseIcon;\n icon.#intersecting = isIntersecting;\n ric(() => {\n if (icon.#intersecting) {\n icon.load();\n }\n });\n });\n\n private static io = new IntersectionObserver(this.onIntersect);\n\n private static getters = new Map<string, URLGetter>();\n\n private static instances = new Set<BaseIcon>();\n\n declare public static defaultIconSet: string;\n\n /** Icon set */\n @property() set = this.#class.defaultIconSet;\n\n /** Icon name */\n @property({ reflect: true }) icon = '';\n\n /** Size of the icon */\n abstract size: string;\n\n /**\n * Controls how eager the element will be to load the icon data\n * - `eager`: eagerly load the icon, blocking the main thread\n * - `idle`: wait for the browser to attain an idle state before loading\n * - `lazy` (default): wait for the element to enter the viewport before loading\n */\n @property() loading?: 'idle' | 'lazy' | 'eager' = 'lazy';\n\n /** Icon content. Any value that lit can render */\n @state() private content?: unknown;\n\n #intersecting = false;\n\n #logger = new Logger(this);\n\n get #class(): typeof BaseIcon {\n return this.constructor as typeof BaseIcon;\n }\n\n #lazyLoad() {\n this.#class.io.observe(this);\n if (this.#intersecting) {\n this.load();\n }\n }\n\n #iconChanged() {\n switch (this.loading) {\n case 'idle': return void ric(() => this.load());\n case 'lazy': return void this.#lazyLoad();\n case 'eager': return void this.load();\n }\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.#class.instances.add(this);\n }\n\n willUpdate(changed: PropertyValues<this>) {\n if (changed.has('icon')) {\n this.#iconChanged();\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#class.instances.delete(this);\n }\n\n render() {\n const content = this.content ?? ''; /* eslint-disable indent */\n return html`\n <div id=\"container\" aria-hidden=\"true\">${content\n }<span part=\"fallback\" ?hidden=${!!content}>\n <slot></slot>\n </span>\n </div>\n `;/* eslint-enable indent */\n }\n\n protected async load() {\n const { set, icon, } = this;\n const getter = this.#class.getters.get(set) ?? this.#class.getIconUrl;\n let spec = 'UNKNOWN ICON';\n if (set && icon) {\n try {\n const gotten = getter(set, icon);\n if (gotten instanceof URL) {\n spec = gotten.pathname;\n } else {\n spec = gotten;\n }\n const mod = await import(spec);\n this.content = mod.default instanceof Node ? mod.default.cloneNode(true) : mod.default;\n await this.updateComplete;\n this.dispatchEvent(new Event('load', { bubbles: true }));\n } catch (error: unknown) {\n const event = new IconLoadError(spec, error as Error);\n this.#logger.error((error as IconLoadError).message);\n this.dispatchEvent(event);\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"BaseIcon.js","sourceRoot":"","sources":["BaseIcon.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyValues } from 'lit';\n\nimport { LitElement, html } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { state } from 'lit/decorators/state.js';\nimport { Logger } from '@patternfly/pfe-core/controllers/logger.js';\n\nimport style from './BaseIcon.css';\n\nexport type URLGetter = (set: string, icon: string) => URL | string;\n\n/** requestIdleCallback when available, requestAnimationFrame when not */\nconst ric = window.requestIdleCallback ?? window.requestAnimationFrame;\n\n/** Fired when an icon fails to load */\nclass IconLoadError extends ErrorEvent {\n constructor(\n pathname: string,\n /** The original error when importing the icon module */\n public originalError: Error\n ) {\n super('error', { message: `Could not load icon at ${pathname}` });\n }\n}\n\n/**\n * Icon component lazy-loads icons and allows custom icon sets\n * @slot - Slotted content is used as a fallback in case the icon doesn't load\n * @fires load - Fired when an icon is loaded and rendered\n * @fires error - Fired when an icon fails to load\n * @csspart fallback - Container for the fallback (i.e. slotted) content\n */\nexport abstract class BaseIcon extends LitElement {\n public static readonly styles = [style];\n\n public static addIconSet(setName: string, getter: typeof BaseIcon['getIconUrl']) {\n if (typeof getter !== 'function') {\n Logger.warn(`[${this.name}.addIconSet(setName, getter)]: getter must be a function`);\n } else {\n this.getters.set(setName, getter);\n for (const instance of this.instances) {\n instance.load();\n }\n }\n }\n\n public static getIconUrl: URLGetter = (set: string, icon: string) =>\n `@patternfly/icons/${set}/${icon}.js`;\n\n private static onIntersect: IntersectionObserverCallback = records =>\n records.forEach(({ isIntersecting, target }) => {\n const icon = target as BaseIcon;\n icon.#intersecting = isIntersecting;\n ric(() => {\n if (icon.#intersecting) {\n icon.load();\n }\n });\n });\n\n private static io = new IntersectionObserver(this.onIntersect);\n\n private static getters = new Map<string, URLGetter>();\n\n private static instances = new Set<BaseIcon>();\n\n declare public static defaultIconSet: string;\n\n /** Icon set */\n @property() set = this.#class.defaultIconSet;\n\n /** Icon name */\n @property({ reflect: true }) icon = '';\n\n /** Size of the icon */\n abstract size: string;\n\n /**\n * Controls how eager the element will be to load the icon data\n * - `eager`: eagerly load the icon, blocking the main thread\n * - `idle`: wait for the browser to attain an idle state before loading\n * - `lazy` (default): wait for the element to enter the viewport before loading\n */\n @property() loading?: 'idle' | 'lazy' | 'eager' = 'lazy';\n\n /** Icon content. Any value that lit can render */\n @state() private content?: unknown;\n\n #intersecting = false;\n\n #logger = new Logger(this);\n\n get #class(): typeof BaseIcon {\n return this.constructor as typeof BaseIcon;\n }\n\n #lazyLoad() {\n this.#class.io.observe(this);\n if (this.#intersecting) {\n this.load();\n }\n }\n\n #iconChanged() {\n switch (this.loading) {\n case 'idle': return void ric(() => this.load());\n case 'lazy': return void this.#lazyLoad();\n case 'eager': return void this.load();\n }\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.#class.instances.add(this);\n }\n\n willUpdate(changed: PropertyValues<this>) {\n if (changed.has('icon')) {\n this.#iconChanged();\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#class.instances.delete(this);\n }\n\n render() {\n const content = this.content ?? '';\n return html`\n <div id=\"container\" aria-hidden=\"true\">${content\n}<span part=\"fallback\" ?hidden=${!!content}>\n <slot></slot>\n </span>\n </div>\n `;\n }\n\n protected async load() {\n const { set, icon } = this;\n const getter = this.#class.getters.get(set) ?? this.#class.getIconUrl;\n let spec = 'UNKNOWN ICON';\n if (set && icon) {\n try {\n const gotten = getter(set, icon);\n if (gotten instanceof URL) {\n spec = gotten.pathname;\n } else {\n spec = gotten;\n }\n const mod = await import(spec);\n this.content = mod.default instanceof Node ? mod.default.cloneNode(true) : mod.default;\n await this.updateComplete;\n this.dispatchEvent(new Event('load', { bubbles: true }));\n } catch (error: unknown) {\n const event = new IconLoadError(spec, error as Error);\n this.#logger.error((error as IconLoadError).message);\n this.dispatchEvent(event);\n }\n }\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ const t = document.createElement('template');t.innerHTML=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36">
2
+ <path d="M13 14.62h10c.35 0 .62-.28.62-.62s-.28-.62-.62-.62H13c-.35 0-.62.28-.62.62s.28.62.62.62Z"/>
3
+ <path d="M28 8.38h-2.25l.69-3.25c.04-.18 0-.38-.13-.52s-.3-.23-.49-.23h-3a.63.63 0 0 0-.61.5l-.74 3.5H8c-.35 0-.62.28-.62.62s.28.62.62.62h.38V13c0 .17.07.33.18.44l.86.86 2.97 16.81c.05.3.31.52.62.52h10c.3 0 .56-.22.62-.52L26.6 14.3l.86-.86a.62.62 0 0 0 .18-.44V9.62h.38c.35 0 .62-.28.62-.62s-.28-.62-.62-.62Zm-4.66-2.75h1.72l-.58 2.75h-1.72l.58-2.75Zm3.04 7.12-.82.82c-.09.09-.15.21-.17.33l-2.91 16.48h-8.96L10.61 13.9a.585.585 0 0 0-.17-.33l-.82-.82V9.63h16.76v3.12Z"/>
4
+ <path d="M16 25.38a1.62 1.62 0 1 0 0 3.24 1.62 1.62 0 0 0 0-3.24Zm0 2a.38.38 0 1 1 0-.76.38.38 0 0 1 0 .76Zm4-4a1.62 1.62 0 1 0 0 3.24 1.62 1.62 0 0 0 0-3.24Zm0 2a.38.38 0 1 1 0-.76.38.38 0 0 1 0 .76Zm-4-5a1.62 1.62 0 1 0 0 3.24 1.62 1.62 0 0 0 0-3.24Zm0 2a.38.38 0 1 1 0-.76.38.38 0 0 1 0 .76Z"/>
5
+ </svg>`;export default t.content.cloneNode(true);
@@ -0,0 +1,3 @@
1
+ const t = document.createElement('template');t.innerHTML=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36">
2
+ <path d="m25.32 10.66-2.88-.13a.63.63 0 0 0-.06 1.25l4.2.19a.59.59 0 0 0 .42-.17.62.62 0 0 0 .2-.43l.19-4.2a.63.63 0 0 0-1.25 0l-.11 2.5A11.61 11.61 0 0 0 14.24 7a3.12 3.12 0 0 0-5.86 1.5c.11 4.3 6.52 4 6.22-.27a10.3 10.3 0 0 1 10.72 2.43Zm-12.49-.83a1.88 1.88 0 0 1-2.66-2.66 1.88 1.88 0 0 1 2.66 2.66Zm-.33 14.55a3.05 3.05 0 0 0-2 .74A10.25 10.25 0 0 1 8 15.17l1.3 2.59a.62.62 0 0 0 1.11-.56l-1.85-3.76a.63.63 0 0 0-.84-.28L4 15a.63.63 0 0 0 .56 1.12L6.76 15a11.55 11.55 0 0 0 3 11.08 3.12 3.12 0 1 0 2.79-1.74Zm1.33 4.45a1.88 1.88 0 0 1-2.66-2.66 1.88 1.88 0 0 1 2.66 2.66ZM31.62 17a3.12 3.12 0 1 0-3.48 3.09A10.34 10.34 0 0 1 20 28.18l1.73-2.32a.63.63 0 0 0-1-.75l-2.5 3.38a.63.63 0 0 0-.12.46.6.6 0 0 0 .25.41l3.37 2.51a.63.63 0 0 0 .75-1l-2-1.49a11.6 11.6 0 0 0 9-9.4A3.09 3.09 0 0 0 31.62 17Zm-1.79 1.33a1.88 1.88 0 0 1-2.66-2.66 1.88 1.88 0 0 1 2.66 2.66Z"/>
3
+ </svg>`;export default t.content.cloneNode(true);
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ import { test } from '@playwright/test';
2
+ import { PfeDemoPage } from '@patternfly/pfe-tools/test/playwright/PfeDemoPage.js';
3
+ const tagName = 'pf-icon';
4
+ test.describe(tagName, () => {
5
+ test('snapshot', async ({ page }) => {
6
+ const componentPage = new PfeDemoPage(page, tagName);
7
+ await componentPage.navigate();
8
+ await componentPage.snapshot();
9
+ });
10
+ });
11
+ //# sourceMappingURL=pf-icon.e2e.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pf-icon.e2e.js","sourceRoot":"","sources":["pf-icon.e2e.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,sDAAsD,CAAC;AAEnF,MAAM,OAAO,GAAG,SAAS,CAAC;AAE1B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IAC1B,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QAClC,MAAM,aAAa,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { test } from '@playwright/test';\nimport { PfeDemoPage } from '@patternfly/pfe-tools/test/playwright/PfeDemoPage.js';\n\nconst tagName = 'pf-icon';\n\ntest.describe(tagName, () => {\n test('snapshot', async ({ page }) => {\n const componentPage = new PfeDemoPage(page, tagName);\n await componentPage.navigate();\n await componentPage.snapshot();\n });\n});\n"]}
@@ -0,0 +1 @@
1
+ import '@patternfly/pfe-tools/test/stub-logger.js';
@@ -0,0 +1,130 @@
1
+ import { expect, fixture, oneEvent } from '@open-wc/testing';
2
+ import { html, render } from 'lit';
3
+ import { Logger } from '@patternfly/pfe-core/controllers/logger.js';
4
+ import { PfIcon } from '@patternfly/elements/pf-icon/pf-icon.js';
5
+ import '@patternfly/pfe-tools/test/stub-logger.js';
6
+ describe('<pf-icon>', function () {
7
+ let element;
8
+ async function expectIconsEqual(actualIconUrl) {
9
+ await oneEvent(element, 'load', false);
10
+ const tpl = await import(actualIconUrl.pathname).then(x => x.default);
11
+ const rootNode = render(tpl, document.createDocumentFragment());
12
+ const actual = element.shadowRoot?.querySelector('svg');
13
+ const expected = rootNode.parentNode.querySelector('svg');
14
+ expect(actual?.outerHTML).to.equal(expected?.outerHTML);
15
+ }
16
+ beforeEach(async function () {
17
+ // @ts-expect-error: this is necessary to reset test state
18
+ PfIcon.getters = new Map();
19
+ PfIcon.io.disconnect();
20
+ element = await fixture(html `<pf-icon></pf-icon>`);
21
+ });
22
+ it('imperatively instantiates', function () {
23
+ expect(document.createElement('pf-icon')).to.be.an.instanceof(PfIcon);
24
+ });
25
+ it('should upgrade', function () {
26
+ expect(element, 'pf-icon should be an instance of PfIcon')
27
+ .to.be.an.instanceOf(customElements.get('pf-icon'))
28
+ .and
29
+ .to.be.an.instanceOf(PfIcon);
30
+ });
31
+ it('should warn if the 2nd argument to addIconSet is not a function', function () {
32
+ // @ts-expect-error: 3rd input is a string
33
+ PfIcon.addIconSet('test', './', 'rh-icon-aed.svg');
34
+ expect(Logger.warn).to.have.been.calledOnceWith(`[PfIcon.addIconSet(setName, getter)]: getter must be a function`);
35
+ });
36
+ it('should warn if there is no function provided to resolve the icon names', function () {
37
+ // @ts-expect-error: testing bad input
38
+ PfIcon.addIconSet('test', './');
39
+ expect(Logger.warn).to.have.been.calledOnceWith('[PfIcon.addIconSet(setName, getter)]: getter must be a function');
40
+ });
41
+ describe('with a custom icon set', function () {
42
+ const testIcons = ['aed', 'api', 'atom', 'bike'];
43
+ function getter(_, icon) {
44
+ return new URL(`./rh-icon-${icon}.js`, import.meta.url);
45
+ }
46
+ beforeEach(async function () {
47
+ // replace the default built-in icon set resolveIconName function
48
+ // with one that loads local icons. we don't want tests dependent on
49
+ // prod servers.
50
+ PfIcon.addIconSet('rh', getter);
51
+ element.set = 'rh';
52
+ });
53
+ for (const iconName of testIcons) {
54
+ it('loads icons', async function () {
55
+ // wait for each test icon to be loaded, then move to the next one
56
+ element.icon = iconName;
57
+ await expectIconsEqual(getter('rh', iconName));
58
+ });
59
+ }
60
+ it('should hide the fallback when it successfully upgrades', async function () {
61
+ element.innerHTML = `<p>Icon failed to load.</p>`;
62
+ // Check that the fallback is hidden when the icon is successfully loaded
63
+ element.icon = 'bike';
64
+ await oneEvent(element, 'load', false);
65
+ expect(element).shadowDom.to.equal(`
66
+ <div id="container" aria-hidden="true">
67
+ <span part="fallback" hidden>
68
+ <slot></slot>
69
+ </span>
70
+ </div>`);
71
+ });
72
+ it('should change color when pf-icon\'s color CSS property is changed', async function () {
73
+ const newColor = 'rgb(11, 12, 13)';
74
+ element.style.setProperty('color', newColor);
75
+ element.icon = 'atom';
76
+ await oneEvent(element, 'load', false);
77
+ const color = getComputedStyle(element.shadowRoot.querySelector('svg')).getPropertyValue('color');
78
+ expect(color).to.equal(newColor);
79
+ });
80
+ });
81
+ describe('changing size attribute', function () {
82
+ const sizes = ['sm', 'md', 'lg', 'xl'];
83
+ let lastSize = { width: 0, height: 0 };
84
+ for (const size of sizes) {
85
+ it('should change size based on the attribute value', async function () {
86
+ element.size = size;
87
+ await element.updateComplete;
88
+ const { width, height } = element.getBoundingClientRect();
89
+ expect(width, `size "${size}" should be wider than the size below`).to.be.greaterThan(lastSize.width);
90
+ expect(height, `size "${size}" should be taller than the size below`).to.be.greaterThan(lastSize.height);
91
+ lastSize = { width, height };
92
+ });
93
+ }
94
+ });
95
+ it(`should fetch an icon even when the icon set is registered after the element upgrades`, async function () {
96
+ const url = new URL('./rh-icon-bike.js', import.meta.url);
97
+ element.set = 'asdfasdf';
98
+ element.icon = 'foo';
99
+ await element.updateComplete;
100
+ PfIcon.addIconSet('asdfasdf', () => url);
101
+ await oneEvent(element, 'load', false);
102
+ await expectIconsEqual(url);
103
+ });
104
+ it(`should show fallback when given a valid icon set but invalid icon name, fallback provided`, async function () {
105
+ element.innerHTML = '<p>Image failed to load.</p>.';
106
+ element.icon = 'no-scrubs';
107
+ await oneEvent(element, 'error', false);
108
+ expect(element.shadowRoot.querySelector('svg')).to.not.be.ok;
109
+ expect(element).shadowDom.to.equal(`
110
+ <div id="container" aria-hidden="true">
111
+ <span part="fallback">
112
+ <slot></slot>
113
+ </span>
114
+ </div>`);
115
+ });
116
+ it('should show fallback when given an invalid icon set, fallback provided', async function () {
117
+ element.innerHTML = '<p>Image failed to load.</p>.';
118
+ element.set = 'choopee-doopee-pie';
119
+ element.icon = 'bike';
120
+ await oneEvent(element, 'error', false);
121
+ expect(element.shadowRoot.querySelector('svg')).to.not.be.ok;
122
+ expect(element).shadowDom.to.equal(`
123
+ <div id="container" aria-hidden="true">
124
+ <span part="fallback">
125
+ <slot></slot>
126
+ </span>
127
+ </div>`);
128
+ });
129
+ });
130
+ //# sourceMappingURL=pf-icon.spec.js.map