@porsche-design-system/components-angular 4.5.0 → 4.6.0-rc.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 (344) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/ag-grid/package.json +6 -0
  3. package/bin/pds-skill.js +346 -0
  4. package/emotion/package.json +6 -0
  5. package/fesm2022/porsche-design-system-components-angular.mjs +232 -232
  6. package/fesm2022/porsche-design-system-components-angular.mjs.map +1 -1
  7. package/jsdom-polyfill/package.json +5 -0
  8. package/meta/package.json +6 -0
  9. package/package.json +5 -2
  10. package/partials/package.json +6 -0
  11. package/skills/pds-knowledge-angular/SKILL.md +124 -0
  12. package/skills/pds-knowledge-angular/references/components/p-accordion/accessibility.md +63 -0
  13. package/skills/pds-knowledge-angular/references/components/p-accordion/examples/Default.ts +26 -0
  14. package/skills/pds-knowledge-angular/references/components/p-accordion/examples/InteractiveElementsInSummary.ts +30 -0
  15. package/skills/pds-knowledge-angular/references/components/p-accordion/examples/StickySummary.ts +26 -0
  16. package/skills/pds-knowledge-angular/references/components/p-accordion/p-accordion.md +99 -0
  17. package/skills/pds-knowledge-angular/references/components/p-ai-tag/examples/Default.ts +13 -0
  18. package/skills/pds-knowledge-angular/references/components/p-ai-tag/examples/WithinCheckbox.ts +33 -0
  19. package/skills/pds-knowledge-angular/references/components/p-ai-tag/examples/WithinFormLabel.ts +40 -0
  20. package/skills/pds-knowledge-angular/references/components/p-ai-tag/examples/WithinImage.ts +16 -0
  21. package/skills/pds-knowledge-angular/references/components/p-ai-tag/examples/WithinInputSearch.ts +15 -0
  22. package/skills/pds-knowledge-angular/references/components/p-ai-tag/examples/WithinRadioGroup.ts +32 -0
  23. package/skills/pds-knowledge-angular/references/components/p-ai-tag/examples/WithinTable.ts +94 -0
  24. package/skills/pds-knowledge-angular/references/components/p-ai-tag/examples/WithinText.ts +17 -0
  25. package/skills/pds-knowledge-angular/references/components/p-ai-tag/p-ai-tag.md +47 -0
  26. package/skills/pds-knowledge-angular/references/components/p-banner/accessibility.md +35 -0
  27. package/skills/pds-knowledge-angular/references/components/p-banner/examples/Customization.ts +37 -0
  28. package/skills/pds-knowledge-angular/references/components/p-banner/examples/Default.ts +26 -0
  29. package/skills/pds-knowledge-angular/references/components/p-banner/p-banner.md +96 -0
  30. package/skills/pds-knowledge-angular/references/components/p-button/accessibility.md +61 -0
  31. package/skills/pds-knowledge-angular/references/components/p-button/examples/Default.ts +15 -0
  32. package/skills/pds-knowledge-angular/references/components/p-button/examples/Form.ts +26 -0
  33. package/skills/pds-knowledge-angular/references/components/p-button/examples/FormAttribute.ts +30 -0
  34. package/skills/pds-knowledge-angular/references/components/p-button/p-button.md +122 -0
  35. package/skills/pds-knowledge-angular/references/components/p-button-pure/accessibility.md +61 -0
  36. package/skills/pds-knowledge-angular/references/components/p-button-pure/examples/CustomClickableArea.ts +15 -0
  37. package/skills/pds-knowledge-angular/references/components/p-button-pure/examples/Default.ts +15 -0
  38. package/skills/pds-knowledge-angular/references/components/p-button-pure/examples/Form.ts +26 -0
  39. package/skills/pds-knowledge-angular/references/components/p-button-pure/examples/FormAttribute.ts +30 -0
  40. package/skills/pds-knowledge-angular/references/components/p-button-pure/p-button-pure.md +122 -0
  41. package/skills/pds-knowledge-angular/references/components/p-button-tile/accessibility.md +31 -0
  42. package/skills/pds-knowledge-angular/references/components/p-button-tile/examples/ColorScheme.ts +18 -0
  43. package/skills/pds-knowledge-angular/references/components/p-button-tile/examples/Default.ts +21 -0
  44. package/skills/pds-knowledge-angular/references/components/p-button-tile/examples/FooterSlot.ts +32 -0
  45. package/skills/pds-knowledge-angular/references/components/p-button-tile/examples/Hyphens.ts +38 -0
  46. package/skills/pds-knowledge-angular/references/components/p-button-tile/examples/UiBehaviour.ts +44 -0
  47. package/skills/pds-knowledge-angular/references/components/p-button-tile/p-button-tile.md +119 -0
  48. package/skills/pds-knowledge-angular/references/components/p-canvas/examples/Default.ts +105 -0
  49. package/skills/pds-knowledge-angular/references/components/p-canvas/p-canvas.md +95 -0
  50. package/skills/pds-knowledge-angular/references/components/p-carousel/accessibility.md +61 -0
  51. package/skills/pds-knowledge-angular/references/components/p-carousel/examples/Default.ts +26 -0
  52. package/skills/pds-knowledge-angular/references/components/p-carousel/examples/DynamicSlides.ts +37 -0
  53. package/skills/pds-knowledge-angular/references/components/p-carousel/examples/FlexibleWidths.ts +32 -0
  54. package/skills/pds-knowledge-angular/references/components/p-carousel/examples/FocusOnCenterSlide.ts +65 -0
  55. package/skills/pds-knowledge-angular/references/components/p-carousel/examples/Intl.ts +23 -0
  56. package/skills/pds-knowledge-angular/references/components/p-carousel/examples/JumpToSlide.ts +50 -0
  57. package/skills/pds-knowledge-angular/references/components/p-carousel/p-carousel.md +146 -0
  58. package/skills/pds-knowledge-angular/references/components/p-checkbox/accessibility.md +31 -0
  59. package/skills/pds-knowledge-angular/references/components/p-checkbox/examples/Default.ts +13 -0
  60. package/skills/pds-knowledge-angular/references/components/p-checkbox/examples/Form.ts +31 -0
  61. package/skills/pds-knowledge-angular/references/components/p-checkbox/examples/Indeterminate.ts +16 -0
  62. package/skills/pds-knowledge-angular/references/components/p-checkbox/examples/Slots.ts +57 -0
  63. package/skills/pds-knowledge-angular/references/components/p-checkbox/examples/WrappedLabel.ts +27 -0
  64. package/skills/pds-knowledge-angular/references/components/p-checkbox/p-checkbox.md +126 -0
  65. package/skills/pds-knowledge-angular/references/components/p-crest/accessibility.md +17 -0
  66. package/skills/pds-knowledge-angular/references/components/p-crest/examples/CustomClickableArea.ts +13 -0
  67. package/skills/pds-knowledge-angular/references/components/p-crest/examples/Default.ts +13 -0
  68. package/skills/pds-knowledge-angular/references/components/p-crest/examples/Link.ts +13 -0
  69. package/skills/pds-knowledge-angular/references/components/p-crest/p-crest.md +69 -0
  70. package/skills/pds-knowledge-angular/references/components/p-display/examples/Color.ts +15 -0
  71. package/skills/pds-knowledge-angular/references/components/p-display/examples/Default.ts +15 -0
  72. package/skills/pds-knowledge-angular/references/components/p-display/examples/Semantics.ts +21 -0
  73. package/skills/pds-knowledge-angular/references/components/p-display/examples/Size.ts +15 -0
  74. package/skills/pds-knowledge-angular/references/components/p-display/examples/SizeResponsive.ts +15 -0
  75. package/skills/pds-knowledge-angular/references/components/p-display/p-display.md +78 -0
  76. package/skills/pds-knowledge-angular/references/components/p-divider/accessibility.md +41 -0
  77. package/skills/pds-knowledge-angular/references/components/p-divider/examples/Default.ts +13 -0
  78. package/skills/pds-knowledge-angular/references/components/p-divider/examples/Responsive.ts +15 -0
  79. package/skills/pds-knowledge-angular/references/components/p-divider/examples/Vertical.ts +15 -0
  80. package/skills/pds-knowledge-angular/references/components/p-divider/p-divider.md +53 -0
  81. package/skills/pds-knowledge-angular/references/components/p-drilldown/accessibility.md +65 -0
  82. package/skills/pds-knowledge-angular/references/components/p-drilldown/examples/CustomContent.ts +166 -0
  83. package/skills/pds-knowledge-angular/references/components/p-drilldown/examples/Default.ts +119 -0
  84. package/skills/pds-knowledge-angular/references/components/p-drilldown/p-drilldown.md +172 -0
  85. package/skills/pds-knowledge-angular/references/components/p-fieldset/accessibility.md +37 -0
  86. package/skills/pds-knowledge-angular/references/components/p-fieldset/examples/Default.ts +15 -0
  87. package/skills/pds-knowledge-angular/references/components/p-fieldset/examples/Required.ts +16 -0
  88. package/skills/pds-knowledge-angular/references/components/p-fieldset/examples/SlottedLabel.ts +18 -0
  89. package/skills/pds-knowledge-angular/references/components/p-fieldset/examples/SlottedMessage.ts +18 -0
  90. package/skills/pds-knowledge-angular/references/components/p-fieldset/p-fieldset.md +92 -0
  91. package/skills/pds-knowledge-angular/references/components/p-flag/accessibility.md +39 -0
  92. package/skills/pds-knowledge-angular/references/components/p-flag/examples/Default.ts +13 -0
  93. package/skills/pds-knowledge-angular/references/components/p-flag/examples/ResponsiveSize.ts +13 -0
  94. package/skills/pds-knowledge-angular/references/components/p-flag/examples/Size.ts +16 -0
  95. package/skills/pds-knowledge-angular/references/components/p-flag/examples/SizeCssVar.ts +13 -0
  96. package/skills/pds-knowledge-angular/references/components/p-flag/p-flag.md +72 -0
  97. package/skills/pds-knowledge-angular/references/components/p-flyout/accessibility.md +80 -0
  98. package/skills/pds-knowledge-angular/references/components/p-flyout/examples/CustomStyling.ts +47 -0
  99. package/skills/pds-knowledge-angular/references/components/p-flyout/examples/Default.ts +44 -0
  100. package/skills/pds-knowledge-angular/references/components/p-flyout/examples/Form.ts +47 -0
  101. package/skills/pds-knowledge-angular/references/components/p-flyout/examples/StickyTop.ts +44 -0
  102. package/skills/pds-knowledge-angular/references/components/p-flyout/p-flyout.md +132 -0
  103. package/skills/pds-knowledge-angular/references/components/p-heading/accessibility.md +29 -0
  104. package/skills/pds-knowledge-angular/references/components/p-heading/examples/Color.ts +15 -0
  105. package/skills/pds-knowledge-angular/references/components/p-heading/examples/Default.ts +15 -0
  106. package/skills/pds-knowledge-angular/references/components/p-heading/examples/Semantics.ts +21 -0
  107. package/skills/pds-knowledge-angular/references/components/p-heading/p-heading.md +82 -0
  108. package/skills/pds-knowledge-angular/references/components/p-icon/accessibility.md +39 -0
  109. package/skills/pds-knowledge-angular/references/components/p-icon/examples/Color.ts +16 -0
  110. package/skills/pds-knowledge-angular/references/components/p-icon/examples/ColorCssVar.ts +13 -0
  111. package/skills/pds-knowledge-angular/references/components/p-icon/examples/Custom.ts +13 -0
  112. package/skills/pds-knowledge-angular/references/components/p-icon/examples/Default.ts +13 -0
  113. package/skills/pds-knowledge-angular/references/components/p-icon/examples/Overview.ts +591 -0
  114. package/skills/pds-knowledge-angular/references/components/p-icon/examples/ResponsiveSize.ts +13 -0
  115. package/skills/pds-knowledge-angular/references/components/p-icon/examples/Size.ts +16 -0
  116. package/skills/pds-knowledge-angular/references/components/p-icon/examples/SizeCssVar.ts +13 -0
  117. package/skills/pds-knowledge-angular/references/components/p-icon/p-icon.md +92 -0
  118. package/skills/pds-knowledge-angular/references/components/p-inline-notification/accessibility.md +38 -0
  119. package/skills/pds-knowledge-angular/references/components/p-inline-notification/examples/ActionButton.ts +29 -0
  120. package/skills/pds-knowledge-angular/references/components/p-inline-notification/examples/Default.ts +13 -0
  121. package/skills/pds-knowledge-angular/references/components/p-inline-notification/examples/EventHandling.ts +31 -0
  122. package/skills/pds-knowledge-angular/references/components/p-inline-notification/p-inline-notification.md +78 -0
  123. package/skills/pds-knowledge-angular/references/components/p-input-date/accessibility.md +45 -0
  124. package/skills/pds-knowledge-angular/references/components/p-input-date/examples/Default.ts +13 -0
  125. package/skills/pds-knowledge-angular/references/components/p-input-date/examples/Form.ts +31 -0
  126. package/skills/pds-knowledge-angular/references/components/p-input-date/examples/Slots.ts +44 -0
  127. package/skills/pds-knowledge-angular/references/components/p-input-date/p-input-date.md +142 -0
  128. package/skills/pds-knowledge-angular/references/components/p-input-email/accessibility.md +45 -0
  129. package/skills/pds-knowledge-angular/references/components/p-input-email/examples/Default.ts +13 -0
  130. package/skills/pds-knowledge-angular/references/components/p-input-email/examples/Form.ts +31 -0
  131. package/skills/pds-knowledge-angular/references/components/p-input-email/examples/Slots.ts +44 -0
  132. package/skills/pds-knowledge-angular/references/components/p-input-email/p-input-email.md +146 -0
  133. package/skills/pds-knowledge-angular/references/components/p-input-month/accessibility.md +45 -0
  134. package/skills/pds-knowledge-angular/references/components/p-input-month/examples/Default.ts +13 -0
  135. package/skills/pds-knowledge-angular/references/components/p-input-month/examples/Form.ts +31 -0
  136. package/skills/pds-knowledge-angular/references/components/p-input-month/examples/Slots.ts +44 -0
  137. package/skills/pds-knowledge-angular/references/components/p-input-month/p-input-month.md +142 -0
  138. package/skills/pds-knowledge-angular/references/components/p-input-number/accessibility.md +45 -0
  139. package/skills/pds-knowledge-angular/references/components/p-input-number/examples/Default.ts +13 -0
  140. package/skills/pds-knowledge-angular/references/components/p-input-number/examples/Form.ts +31 -0
  141. package/skills/pds-knowledge-angular/references/components/p-input-number/examples/Slots.ts +44 -0
  142. package/skills/pds-knowledge-angular/references/components/p-input-number/p-input-number.md +150 -0
  143. package/skills/pds-knowledge-angular/references/components/p-input-password/accessibility.md +45 -0
  144. package/skills/pds-knowledge-angular/references/components/p-input-password/examples/Default.ts +13 -0
  145. package/skills/pds-knowledge-angular/references/components/p-input-password/examples/Form.ts +31 -0
  146. package/skills/pds-knowledge-angular/references/components/p-input-password/examples/Slots.ts +42 -0
  147. package/skills/pds-knowledge-angular/references/components/p-input-password/examples/Toggle.ts +13 -0
  148. package/skills/pds-knowledge-angular/references/components/p-input-password/p-input-password.md +145 -0
  149. package/skills/pds-knowledge-angular/references/components/p-input-search/accessibility.md +59 -0
  150. package/skills/pds-knowledge-angular/references/components/p-input-search/examples/AriaCombobox.ts +38 -0
  151. package/skills/pds-knowledge-angular/references/components/p-input-search/examples/Default.ts +13 -0
  152. package/skills/pds-knowledge-angular/references/components/p-input-search/examples/Form.ts +31 -0
  153. package/skills/pds-knowledge-angular/references/components/p-input-search/examples/Slots.ts +44 -0
  154. package/skills/pds-knowledge-angular/references/components/p-input-search/p-input-search.md +182 -0
  155. package/skills/pds-knowledge-angular/references/components/p-input-tel/accessibility.md +45 -0
  156. package/skills/pds-knowledge-angular/references/components/p-input-tel/examples/Default.ts +13 -0
  157. package/skills/pds-knowledge-angular/references/components/p-input-tel/examples/Form.ts +31 -0
  158. package/skills/pds-knowledge-angular/references/components/p-input-tel/examples/Slots.ts +44 -0
  159. package/skills/pds-knowledge-angular/references/components/p-input-tel/p-input-tel.md +145 -0
  160. package/skills/pds-knowledge-angular/references/components/p-input-text/accessibility.md +45 -0
  161. package/skills/pds-knowledge-angular/references/components/p-input-text/examples/Controlled.ts +36 -0
  162. package/skills/pds-knowledge-angular/references/components/p-input-text/examples/Default.ts +13 -0
  163. package/skills/pds-knowledge-angular/references/components/p-input-text/examples/Form.ts +31 -0
  164. package/skills/pds-knowledge-angular/references/components/p-input-text/examples/Slots.ts +44 -0
  165. package/skills/pds-knowledge-angular/references/components/p-input-text/p-input-text.md +150 -0
  166. package/skills/pds-knowledge-angular/references/components/p-input-time/accessibility.md +45 -0
  167. package/skills/pds-knowledge-angular/references/components/p-input-time/examples/Default.ts +13 -0
  168. package/skills/pds-knowledge-angular/references/components/p-input-time/examples/Form.ts +31 -0
  169. package/skills/pds-knowledge-angular/references/components/p-input-time/examples/Slots.ts +44 -0
  170. package/skills/pds-knowledge-angular/references/components/p-input-time/p-input-time.md +144 -0
  171. package/skills/pds-knowledge-angular/references/components/p-input-url/accessibility.md +45 -0
  172. package/skills/pds-knowledge-angular/references/components/p-input-url/examples/Default.ts +13 -0
  173. package/skills/pds-knowledge-angular/references/components/p-input-url/examples/Form.ts +31 -0
  174. package/skills/pds-knowledge-angular/references/components/p-input-url/examples/Slots.ts +44 -0
  175. package/skills/pds-knowledge-angular/references/components/p-input-url/p-input-url.md +145 -0
  176. package/skills/pds-knowledge-angular/references/components/p-input-week/accessibility.md +45 -0
  177. package/skills/pds-knowledge-angular/references/components/p-input-week/examples/Default.ts +13 -0
  178. package/skills/pds-knowledge-angular/references/components/p-input-week/examples/Form.ts +31 -0
  179. package/skills/pds-knowledge-angular/references/components/p-input-week/examples/Slots.ts +44 -0
  180. package/skills/pds-knowledge-angular/references/components/p-input-week/p-input-week.md +142 -0
  181. package/skills/pds-knowledge-angular/references/components/p-link/accessibility.md +73 -0
  182. package/skills/pds-knowledge-angular/references/components/p-link/examples/Default.ts +15 -0
  183. package/skills/pds-knowledge-angular/references/components/p-link/examples/FrameworkRouting.ts +17 -0
  184. package/skills/pds-knowledge-angular/references/components/p-link/examples/Icon.ts +20 -0
  185. package/skills/pds-knowledge-angular/references/components/p-link/p-link.md +105 -0
  186. package/skills/pds-knowledge-angular/references/components/p-link-pure/accessibility.md +73 -0
  187. package/skills/pds-knowledge-angular/references/components/p-link-pure/examples/CustomClickableArea.ts +15 -0
  188. package/skills/pds-knowledge-angular/references/components/p-link-pure/examples/Default.ts +15 -0
  189. package/skills/pds-knowledge-angular/references/components/p-link-pure/examples/FrameworkRouting.ts +17 -0
  190. package/skills/pds-knowledge-angular/references/components/p-link-pure/examples/Icon.ts +20 -0
  191. package/skills/pds-knowledge-angular/references/components/p-link-pure/p-link-pure.md +114 -0
  192. package/skills/pds-knowledge-angular/references/components/p-link-tile/accessibility.md +31 -0
  193. package/skills/pds-knowledge-angular/references/components/p-link-tile/examples/ColorScheme.ts +18 -0
  194. package/skills/pds-knowledge-angular/references/components/p-link-tile/examples/Default.ts +21 -0
  195. package/skills/pds-knowledge-angular/references/components/p-link-tile/examples/FooterSlot.ts +32 -0
  196. package/skills/pds-knowledge-angular/references/components/p-link-tile/examples/Hyphens.ts +39 -0
  197. package/skills/pds-knowledge-angular/references/components/p-link-tile/examples/UiBehaviour.ts +44 -0
  198. package/skills/pds-knowledge-angular/references/components/p-link-tile/examples/WithVideo.ts +18 -0
  199. package/skills/pds-knowledge-angular/references/components/p-link-tile/p-link-tile.md +109 -0
  200. package/skills/pds-knowledge-angular/references/components/p-link-tile-product/examples/Default.ts +24 -0
  201. package/skills/pds-knowledge-angular/references/components/p-link-tile-product/examples/FrameworkRouting.ts +27 -0
  202. package/skills/pds-knowledge-angular/references/components/p-link-tile-product/p-link-tile-product.md +93 -0
  203. package/skills/pds-knowledge-angular/references/components/p-modal/accessibility.md +80 -0
  204. package/skills/pds-knowledge-angular/references/components/p-modal/examples/AlertDialog.ts +41 -0
  205. package/skills/pds-knowledge-angular/references/components/p-modal/examples/CustomStyling.ts +28 -0
  206. package/skills/pds-knowledge-angular/references/components/p-modal/examples/Default.ts +41 -0
  207. package/skills/pds-knowledge-angular/references/components/p-modal/examples/Scrollable.ts +45 -0
  208. package/skills/pds-knowledge-angular/references/components/p-modal/p-modal.md +139 -0
  209. package/skills/pds-knowledge-angular/references/components/p-model-signature/examples/CustomStyling.ts +17 -0
  210. package/skills/pds-knowledge-angular/references/components/p-model-signature/examples/Default.ts +13 -0
  211. package/skills/pds-knowledge-angular/references/components/p-model-signature/examples/MaskBlendMode.ts +35 -0
  212. package/skills/pds-knowledge-angular/references/components/p-model-signature/examples/MaskImage.ts +15 -0
  213. package/skills/pds-knowledge-angular/references/components/p-model-signature/examples/MaskVideo.ts +15 -0
  214. package/skills/pds-knowledge-angular/references/components/p-model-signature/examples/SafeZone.ts +63 -0
  215. package/skills/pds-knowledge-angular/references/components/p-model-signature/p-model-signature.md +62 -0
  216. package/skills/pds-knowledge-angular/references/components/p-multi-select/accessibility.md +78 -0
  217. package/skills/pds-knowledge-angular/references/components/p-multi-select/examples/AsyncFilter.ts +149 -0
  218. package/skills/pds-knowledge-angular/references/components/p-multi-select/examples/Default.ts +32 -0
  219. package/skills/pds-knowledge-angular/references/components/p-multi-select/examples/Form.ts +38 -0
  220. package/skills/pds-knowledge-angular/references/components/p-multi-select/examples/Optgroups.ts +45 -0
  221. package/skills/pds-knowledge-angular/references/components/p-multi-select/examples/SelectedSlot.ts +103 -0
  222. package/skills/pds-knowledge-angular/references/components/p-multi-select/examples/SetValue.ts +76 -0
  223. package/skills/pds-knowledge-angular/references/components/p-multi-select/examples/Slots.ts +51 -0
  224. package/skills/pds-knowledge-angular/references/components/p-multi-select/p-multi-select.md +201 -0
  225. package/skills/pds-knowledge-angular/references/components/p-pagination/accessibility.md +23 -0
  226. package/skills/pds-knowledge-angular/references/components/p-pagination/examples/Default.ts +13 -0
  227. package/skills/pds-knowledge-angular/references/components/p-pagination/p-pagination.md +87 -0
  228. package/skills/pds-knowledge-angular/references/components/p-pin-code/accessibility.md +45 -0
  229. package/skills/pds-knowledge-angular/references/components/p-pin-code/examples/CopyPaste.ts +13 -0
  230. package/skills/pds-knowledge-angular/references/components/p-pin-code/examples/Default.ts +13 -0
  231. package/skills/pds-knowledge-angular/references/components/p-pin-code/examples/Form.ts +31 -0
  232. package/skills/pds-knowledge-angular/references/components/p-pin-code/examples/Slots.ts +42 -0
  233. package/skills/pds-knowledge-angular/references/components/p-pin-code/p-pin-code.md +113 -0
  234. package/skills/pds-knowledge-angular/references/components/p-popover/accessibility.md +61 -0
  235. package/skills/pds-knowledge-angular/references/components/p-popover/examples/Default.ts +17 -0
  236. package/skills/pds-knowledge-angular/references/components/p-popover/examples/SlottedButton.ts +18 -0
  237. package/skills/pds-knowledge-angular/references/components/p-popover/p-popover.md +120 -0
  238. package/skills/pds-knowledge-angular/references/components/p-radio-group/accessibility.md +63 -0
  239. package/skills/pds-knowledge-angular/references/components/p-radio-group/examples/Default.ts +20 -0
  240. package/skills/pds-knowledge-angular/references/components/p-radio-group/examples/Form.ts +38 -0
  241. package/skills/pds-knowledge-angular/references/components/p-radio-group/examples/Slots.ts +72 -0
  242. package/skills/pds-knowledge-angular/references/components/p-radio-group/p-radio-group.md +161 -0
  243. package/skills/pds-knowledge-angular/references/components/p-scroller/accessibility.md +31 -0
  244. package/skills/pds-knowledge-angular/references/components/p-scroller/examples/Default.ts +54 -0
  245. package/skills/pds-knowledge-angular/references/components/p-scroller/examples/Height.ts +29 -0
  246. package/skills/pds-knowledge-angular/references/components/p-scroller/examples/ScrollToPosition.ts +43 -0
  247. package/skills/pds-knowledge-angular/references/components/p-scroller/p-scroller.md +97 -0
  248. package/skills/pds-knowledge-angular/references/components/p-segmented-control/accessibility.md +67 -0
  249. package/skills/pds-knowledge-angular/references/components/p-segmented-control/examples/Default.ts +29 -0
  250. package/skills/pds-knowledge-angular/references/components/p-segmented-control/examples/Form.ts +37 -0
  251. package/skills/pds-knowledge-angular/references/components/p-segmented-control/examples/Slots.ts +57 -0
  252. package/skills/pds-knowledge-angular/references/components/p-segmented-control/examples/WithLabels.ts +29 -0
  253. package/skills/pds-knowledge-angular/references/components/p-segmented-control/p-segmented-control.md +166 -0
  254. package/skills/pds-knowledge-angular/references/components/p-select/accessibility.md +140 -0
  255. package/skills/pds-knowledge-angular/references/components/p-select/examples/AsyncFilter.ts +149 -0
  256. package/skills/pds-knowledge-angular/references/components/p-select/examples/Default.ts +32 -0
  257. package/skills/pds-knowledge-angular/references/components/p-select/examples/Form.ts +38 -0
  258. package/skills/pds-knowledge-angular/references/components/p-select/examples/Optgroups.ts +45 -0
  259. package/skills/pds-knowledge-angular/references/components/p-select/examples/Required.ts +48 -0
  260. package/skills/pds-knowledge-angular/references/components/p-select/examples/SelectedSlot.ts +130 -0
  261. package/skills/pds-knowledge-angular/references/components/p-select/examples/SetValue.ts +71 -0
  262. package/skills/pds-knowledge-angular/references/components/p-select/examples/Slots.ts +51 -0
  263. package/skills/pds-knowledge-angular/references/components/p-select/examples/SlottedImages.ts +38 -0
  264. package/skills/pds-knowledge-angular/references/components/p-select/p-select.md +198 -0
  265. package/skills/pds-knowledge-angular/references/components/p-sheet/accessibility.md +80 -0
  266. package/skills/pds-knowledge-angular/references/components/p-sheet/examples/Default.ts +33 -0
  267. package/skills/pds-knowledge-angular/references/components/p-sheet/p-sheet.md +125 -0
  268. package/skills/pds-knowledge-angular/references/components/p-spinner/accessibility.md +33 -0
  269. package/skills/pds-knowledge-angular/references/components/p-spinner/examples/Color.ts +16 -0
  270. package/skills/pds-knowledge-angular/references/components/p-spinner/examples/ColorCssVar.ts +13 -0
  271. package/skills/pds-knowledge-angular/references/components/p-spinner/examples/Default.ts +13 -0
  272. package/skills/pds-knowledge-angular/references/components/p-spinner/examples/ResponsiveSize.ts +13 -0
  273. package/skills/pds-knowledge-angular/references/components/p-spinner/examples/Size.ts +16 -0
  274. package/skills/pds-knowledge-angular/references/components/p-spinner/examples/SizeCssVar.ts +13 -0
  275. package/skills/pds-knowledge-angular/references/components/p-spinner/p-spinner.md +100 -0
  276. package/skills/pds-knowledge-angular/references/components/p-stepper-horizontal/accessibility.md +34 -0
  277. package/skills/pds-knowledge-angular/references/components/p-stepper-horizontal/examples/Default.ts +26 -0
  278. package/skills/pds-knowledge-angular/references/components/p-stepper-horizontal/examples/FrameworkImplementation.ts +107 -0
  279. package/skills/pds-knowledge-angular/references/components/p-stepper-horizontal/p-stepper-horizontal.md +113 -0
  280. package/skills/pds-knowledge-angular/references/components/p-switch/accessibility.md +35 -0
  281. package/skills/pds-knowledge-angular/references/components/p-switch/examples/Default.ts +21 -0
  282. package/skills/pds-knowledge-angular/references/components/p-switch/p-switch.md +107 -0
  283. package/skills/pds-knowledge-angular/references/components/p-table/accessibility.md +47 -0
  284. package/skills/pds-knowledge-angular/references/components/p-table/examples/Advanced.ts +162 -0
  285. package/skills/pds-knowledge-angular/references/components/p-table/examples/CaptionProperty.ts +40 -0
  286. package/skills/pds-knowledge-angular/references/components/p-table/examples/CaptionSlot.ts +43 -0
  287. package/skills/pds-knowledge-angular/references/components/p-table/examples/Default.ts +120 -0
  288. package/skills/pds-knowledge-angular/references/components/p-table/examples/HideLabel.ts +40 -0
  289. package/skills/pds-knowledge-angular/references/components/p-table/examples/LayoutFixed.ts +53 -0
  290. package/skills/pds-knowledge-angular/references/components/p-table/examples/Sorting.ts +80 -0
  291. package/skills/pds-knowledge-angular/references/components/p-table/p-table.md +193 -0
  292. package/skills/pds-knowledge-angular/references/components/p-tabs/accessibility.md +56 -0
  293. package/skills/pds-knowledge-angular/references/components/p-tabs/examples/ActiveTab.ts +29 -0
  294. package/skills/pds-knowledge-angular/references/components/p-tabs/examples/Default.ts +29 -0
  295. package/skills/pds-knowledge-angular/references/components/p-tabs/examples/Gradient.ts +114 -0
  296. package/skills/pds-knowledge-angular/references/components/p-tabs/examples/Labelling.ts +29 -0
  297. package/skills/pds-knowledge-angular/references/components/p-tabs/p-tabs.md +140 -0
  298. package/skills/pds-knowledge-angular/references/components/p-tabs-bar/accessibility.md +61 -0
  299. package/skills/pds-knowledge-angular/references/components/p-tabs-bar/examples/Default.ts +29 -0
  300. package/skills/pds-knowledge-angular/references/components/p-tabs-bar/examples/Gradient.ts +80 -0
  301. package/skills/pds-knowledge-angular/references/components/p-tabs-bar/examples/Labelling.ts +29 -0
  302. package/skills/pds-knowledge-angular/references/components/p-tabs-bar/examples/Links.ts +23 -0
  303. package/skills/pds-knowledge-angular/references/components/p-tabs-bar/p-tabs-bar.md +185 -0
  304. package/skills/pds-knowledge-angular/references/components/p-tag/accessibility.md +19 -0
  305. package/skills/pds-knowledge-angular/references/components/p-tag/examples/Default.ts +15 -0
  306. package/skills/pds-knowledge-angular/references/components/p-tag/examples/Multiline.ts +17 -0
  307. package/skills/pds-knowledge-angular/references/components/p-tag/examples/SlottedButton.ts +44 -0
  308. package/skills/pds-knowledge-angular/references/components/p-tag/examples/SlottedLink.ts +44 -0
  309. package/skills/pds-knowledge-angular/references/components/p-tag/p-tag.md +70 -0
  310. package/skills/pds-knowledge-angular/references/components/p-tag-dismissible/accessibility.md +35 -0
  311. package/skills/pds-knowledge-angular/references/components/p-tag-dismissible/examples/Default.ts +15 -0
  312. package/skills/pds-knowledge-angular/references/components/p-tag-dismissible/p-tag-dismissible.md +79 -0
  313. package/skills/pds-knowledge-angular/references/components/p-text/accessibility.md +21 -0
  314. package/skills/pds-knowledge-angular/references/components/p-text/examples/Default.ts +15 -0
  315. package/skills/pds-knowledge-angular/references/components/p-text/examples/Semantics.ts +21 -0
  316. package/skills/pds-knowledge-angular/references/components/p-text/examples/Size.ts +15 -0
  317. package/skills/pds-knowledge-angular/references/components/p-text/examples/SizeResponsive.ts +15 -0
  318. package/skills/pds-knowledge-angular/references/components/p-text/p-text.md +72 -0
  319. package/skills/pds-knowledge-angular/references/components/p-text-list/accessibility.md +31 -0
  320. package/skills/pds-knowledge-angular/references/components/p-text-list/examples/Default.ts +31 -0
  321. package/skills/pds-knowledge-angular/references/components/p-text-list/p-text-list.md +72 -0
  322. package/skills/pds-knowledge-angular/references/components/p-textarea/accessibility.md +45 -0
  323. package/skills/pds-knowledge-angular/references/components/p-textarea/examples/Default.ts +13 -0
  324. package/skills/pds-knowledge-angular/references/components/p-textarea/examples/Form.ts +31 -0
  325. package/skills/pds-knowledge-angular/references/components/p-textarea/examples/Slots.ts +42 -0
  326. package/skills/pds-knowledge-angular/references/components/p-textarea/p-textarea.md +126 -0
  327. package/skills/pds-knowledge-angular/references/components/p-toast/examples/Default.ts +23 -0
  328. package/skills/pds-knowledge-angular/references/components/p-toast/p-toast.md +61 -0
  329. package/skills/pds-knowledge-angular/references/components/p-wordmark/accessibility.md +31 -0
  330. package/skills/pds-knowledge-angular/references/components/p-wordmark/examples/CustomClickableArea.ts +13 -0
  331. package/skills/pds-knowledge-angular/references/components/p-wordmark/examples/Default.ts +13 -0
  332. package/skills/pds-knowledge-angular/references/components/p-wordmark/examples/Size.ts +13 -0
  333. package/skills/pds-knowledge-angular/references/components/p-wordmark/p-wordmark.md +70 -0
  334. package/skills/pds-knowledge-angular/references/icons.md +5 -0
  335. package/skills/pds-knowledge-angular/references/styles/emotion.md +439 -0
  336. package/skills/pds-knowledge-angular/references/styles/scss.md +402 -0
  337. package/skills/pds-knowledge-angular/references/styles/tailwindcss.md +356 -0
  338. package/skills/pds-knowledge-angular/references/styles/vanilla-extract.md +444 -0
  339. package/skills/pds-knowledge-angular/references/stylesheets.md +331 -0
  340. package/skills/pds-knowledge-angular/references/tokens.md +323 -0
  341. package/testing/package.json +5 -0
  342. package/tokens/package.json +6 -0
  343. package/types/porsche-design-system-components-angular.d.ts +2 -2
  344. package/vanilla-extract/package.json +6 -0
@@ -0,0 +1,61 @@
1
+ # p-button-pure accessibility integration examples
2
+
3
+ ## Integration examples
4
+
5
+ ### ARIA on component host vs aria prop
6
+
7
+ #### ❌ Anti-pattern
8
+
9
+ ```html
10
+ <p-button-pure aria-haspopup="dialog" aria-label="Open details of product XYZ">
11
+ Open details
12
+ </p-button-pure>
13
+ ```
14
+
15
+ #### ✅ Recommended
16
+
17
+ ```html
18
+ <p-button-pure [aria]="{'aria-haspopup': 'dialog', 'aria-label': 'Open details of product XYZ'}">
19
+ Open details
20
+ </p-button-pure>
21
+ ```
22
+
23
+ ### Icon-only button without accessible name
24
+
25
+ #### ❌ Anti-pattern
26
+
27
+ ```html
28
+ <p-button-pure icon="plus"></p-button-pure>
29
+ ```
30
+
31
+ #### ✅ Recommended
32
+
33
+ ```html
34
+ <p-button-pure icon="plus" [hideLabel]="true">
35
+ Add item XYZ to shopping cart
36
+ </p-button-pure>
37
+ ```
38
+
39
+ ### Vague button label without context
40
+
41
+ #### ❌ Anti-pattern
42
+
43
+ ```html
44
+ <p-button-pure icon="plus">
45
+ Add
46
+ </p-button-pure>
47
+ ```
48
+
49
+ #### ✅ Recommended
50
+
51
+ ```html
52
+ <p-button-pure icon="plus" [aria]="{'aria-label': 'Add item XYZ to shopping cart'}">
53
+ Add
54
+ </p-button-pure>
55
+
56
+ <!-- or use descriptive visible text -->
57
+
58
+ <p-button-pure icon="plus">
59
+ Add item XYZ to cart
60
+ </p-button-pure>
61
+ ```
@@ -0,0 +1,15 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { PorscheDesignSystemModule } from '@porsche-design-system/components-angular';
3
+
4
+ @Component({
5
+ selector: 'porsche-design-system-app',
6
+ template: `
7
+ <p-button-pure class="p-static-md">
8
+ Some label
9
+ </p-button-pure>
10
+ `,
11
+ changeDetection: ChangeDetectionStrategy.OnPush,
12
+ standalone: true,
13
+ imports: [PorscheDesignSystemModule], // <-- PDS module is imported here
14
+ })
15
+ export class ExampleComponent {}
@@ -0,0 +1,15 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { PorscheDesignSystemModule } from '@porsche-design-system/components-angular';
3
+
4
+ @Component({
5
+ selector: 'porsche-design-system-app',
6
+ template: `
7
+ <p-button-pure>
8
+ Some label
9
+ </p-button-pure>
10
+ `,
11
+ changeDetection: ChangeDetectionStrategy.OnPush,
12
+ standalone: true,
13
+ imports: [PorscheDesignSystemModule], // <-- PDS module is imported here
14
+ })
15
+ export class ExampleComponent {}
@@ -0,0 +1,26 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { PorscheDesignSystemModule } from '@porsche-design-system/components-angular';
3
+
4
+ @Component({
5
+ selector: 'porsche-design-system-app',
6
+ template: `
7
+ <form (submit)="handleSubmit($event)" class="flex gap-fluid-sm">
8
+ <p-button-pure name="option" value="A" type="submit">Button A</p-button-pure>
9
+ <p-button-pure name="option" value="B" type="submit">Button B</p-button-pure>
10
+ </form>
11
+
12
+ <p-text>Last submitted data: {{ lastSubmittedData }}</p-text>
13
+ `,
14
+ changeDetection: ChangeDetectionStrategy.OnPush,
15
+ standalone: true,
16
+ imports: [PorscheDesignSystemModule],
17
+ })
18
+ export class ExampleComponent {
19
+ lastSubmittedData: string = 'none';
20
+
21
+ handleSubmit(e: Event): void {
22
+ e.preventDefault();
23
+ const submitter = (e as SubmitEvent).submitter as HTMLButtonElement;
24
+ this.lastSubmittedData = submitter.name + '=' + submitter.value || 'none';
25
+ }
26
+ }
@@ -0,0 +1,30 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { PorscheDesignSystemModule } from '@porsche-design-system/components-angular';
3
+
4
+ @Component({
5
+ selector: 'porsche-design-system-app',
6
+ template: `
7
+ <form (submit)="handleSubmit($event)" id="some-form">
8
+ <p-textarea name="some-name" label="Some Label"></p-textarea>
9
+ </form>
10
+
11
+ <div class="flex gap-fluid-sm mt-fluid-sm">
12
+ <p-button-pure type="submit" form="some-form">Submit</p-button-pure>
13
+ <p-button-pure type="reset" form="some-form">Reset</p-button-pure>
14
+ </div>
15
+
16
+ <p-text>Last submitted data: {{ lastSubmittedData }}</p-text>
17
+ `,
18
+ changeDetection: ChangeDetectionStrategy.OnPush,
19
+ standalone: true,
20
+ imports: [PorscheDesignSystemModule],
21
+ })
22
+ export class ExampleComponent {
23
+ lastSubmittedData: string = 'none';
24
+
25
+ handleSubmit(e: Event): void {
26
+ e.preventDefault();
27
+ const formData = new FormData(e.target as HTMLFormElement);
28
+ this.lastSubmittedData = (formData.get('some-name') as string) || 'none';
29
+ }
30
+ }
@@ -0,0 +1,122 @@
1
+ # p-button-pure
2
+
3
+ The `p-button-pure` component is essential to perform events for **interactions**. A Button can be used with or without a label, but it's recommended to keep the **label visible** for better **usability** whenever possible. When used without a label, it is mandatory for **accessibility** to provide a descriptive label text for screen readers.
4
+
5
+ Whenever you want to provide navigational elements, stick to the [Link](../p-link/p-link.md) or [Link Pure](../p-link-pure/p-link-pure.md) component instead.
6
+
7
+ Similarly to the `p-button`, the `p-button-pure` can be used as a submit button within a form for which a `name` and `value` prop can be passed. See the [Button Form Example](../p-button/p-button.md) for more information.
8
+
9
+ You can use native `click`, `focus`, `focusin`, `blur` and `focusout` events on the `p-button-pure`.
10
+
11
+ ## Usage
12
+
13
+ ### Do:
14
+
15
+ - Use Button Pure as a more subtle call to action or to execute an action.
16
+ - Choose the appropriate variant for your use case, such as Icon and Text or Text only.
17
+ - Use Icon left as the default state and stretch only on small viewports or areas.
18
+ - Keep the label short and include active verbs to indicate the action.
19
+ - Stack Button Pure groups left-aligned to guarantee scannability and legibility.
20
+
21
+ ### Don't:
22
+
23
+ - Don't use Button Pure as the primary or only call to action.
24
+ - Don't use long labels that do not give a clear indication of the action.
25
+ - Don't use buttons to link/navigate to other pages. Use regular [Link](../p-link/p-link.md) instead.
26
+
27
+ ## Accessibility support
28
+
29
+ ### Keyboard
30
+
31
+ | Key / state | Function |
32
+ | --- | --- |
33
+ | `Tab`, `Shift-Tab` | Moves focus to the next (or previous) focusable element. |
34
+ | `Enter`, `Space` | Activates the button. |
35
+ | `disabled` | Button still focusable. |
36
+
37
+ ### ARIA enhancements
38
+
39
+ #### External **ARIA** provided by the `aria` property:
40
+
41
+ | ARIA | Usage |
42
+ | --- | --- |
43
+ | `aria-label` | Defines a string value that labels the interactive element. |
44
+ | `aria-description` | Defines a string value that adds a more detailed description of the interactive element. |
45
+ | `aria-expanded` | Exposes a visual state (e.g. expanded/collapsed) of another element. |
46
+ | `aria-pressed` | Exposes the `pressed` state of a toggle button. |
47
+ | `aria-haspopup` | Defines that the button opens a popup (e.g. `dialog`). It can be used in combination with `aria-expanded` to indicate the state of the popup. |
48
+
49
+ #### Internal **ARIA** that is managed by the component:
50
+
51
+ | ARIA | Usage |
52
+ | --- | --- |
53
+ | `aria-disabled="true"` | When `disabled` prop is set, this ARIA attribute is set on the button element. |
54
+ | `role="status"` | When `loading` prop is set, the component announces the loading state (start and finish). |
55
+ | `aria-hidden="true"` | When the `icon` prop is set, the icon is hidden from the screen reader. |
56
+
57
+ ## Limitations
58
+
59
+ Due to the nature of **Web Components** and **shadow DOM**, there are limitations when using some **ARIA** attributes to define relationships between elements across different shadow DOMs or shadow DOM/light DOM combinations.
60
+
61
+ | ARIA | Support |
62
+ | --- | --- |
63
+ | `aria-labelledby` | 🚫 |
64
+ | `aria-describedby` | 🚫 |
65
+ | `aria-owns` | 🚫 |
66
+ | `aria-controls` | 🚫 |
67
+ | `aria-activedescendant` | 🚫 |
68
+
69
+ ## Development considerations
70
+
71
+ ### Labelling
72
+
73
+ If the text of a button does not clearly indicate what the button's behavior is, add a brief, descriptive label using the `aria` property with the `aria-label` value to provide more context for screen reader users. Phrases like "Add," "Detail," or "Show" can be unclear when read out of context by a screen reader. In such instances, provide an alternative text that offers more detailed information, such as "Add item XYZ to shopping cart" or "Details of product XYZ."
74
+
75
+ ### Common do's and don'ts
76
+
77
+ - **Do** pass ARIA attributes via the `aria` prop, for example `aria="{ 'aria-haspopup': 'dialog' }"` when opening a dialog.
78
+ - **Do** provide a clear accessible name for icon-only actions via slotted label or `aria` property.
79
+ - **Don't** add native `aria-*` attributes directly on the component host.
80
+ - **Don't** rely on short generic button labels like "Show" or "Add" without context.
81
+
82
+ ## Integration examples
83
+
84
+ See [accessibility integration examples](./accessibility.md) for paired anti-pattern and recommended implementations.
85
+
86
+ ## API
87
+
88
+ ### Properties
89
+
90
+ | Property | Type | Default | Description |
91
+ | --- | --- | --- | --- |
92
+ | `active` | `boolean` | `false` | Visually marks the button as the currently active or selected item, useful for navigation and toggle patterns. |
93
+ | `alignLabel` | `'start'` `'end'`<br>`BreakpointCustomizable<ButtonPureAlignLabel>` | `'end'` | Sets the label position relative to the icon — `start` places it before, `end` places it after. Supports responsive breakpoint values. |
94
+ | `aria` | `ButtonPureAriaAttribute` | `undefined` | Sets ARIA attributes on the button to improve accessibility for screen readers. |
95
+ | `color` | `'primary'` `'contrast-higher'` `'contrast-high'` `'contrast-medium'` `'inherit'` | `'primary'` | Sets the foreground color of the button's icon and label text. |
96
+ | `disabled` | `boolean` | `false` | Disables the button, preventing all interaction and blocking events. |
97
+ | `form` | `string` | `undefined` | Associates the button with a form element by its ID, so it can submit or reset that form even when placed outside of it. |
98
+ | `hideLabel` | `boolean`<br>`BreakpointCustomizable<boolean>` | `false` | Hides the visible label while keeping it accessible to screen readers. Supports responsive breakpoint values. |
99
+ | `icon` | `''`<br>one of 290 icon names — see [icon names](references/icons.md) | `'arrow-right'` | Sets the icon displayed next to the label. |
100
+ | `iconSource` | `string` | `undefined` | Sets a path to a custom SVG icon, used instead of the built-in icon set. |
101
+ | `loading` | `boolean` | `false` | Disables the button and replaces its icon with a loading spinner to indicate an ongoing operation. |
102
+ | `name` | `string` | `undefined` | Sets the name submitted with the form data when this button triggers form submission. |
103
+ | `size` | `'2xs'` `'xs'` `'sm'` `'md'` `'lg'` `'xl'` `'2xl'` `'3xl'` `'4xl'` `'5xl'` `'inherit'`<br>_deprecated:_ `'xx-small'` `'x-small'` `'small'` `'medium'` `'large'` `'x-large'`<br>`BreakpointCustomizable<ButtonPureSize>` | `'sm'` | Sets the font size of the button label. Supports responsive breakpoint values. |
104
+ | `stretch` | `boolean`<br>`BreakpointCustomizable<boolean>` | `false` | Expands the space between icon and label to fill the full container width. Supports responsive breakpoint values. |
105
+ | `type` | `'button'` `'submit'` `'reset'` | `'submit'` | Sets the button's HTML type — `submit` sends the form, `reset` clears it, `button` performs no default action. |
106
+ | `underline` | `boolean` | `false` | Adds a text underline to the label to reinforce the button's link-like appearance. |
107
+ | `value` | `string` | `undefined` | Sets the value submitted with the form data when this button triggers form submission, paired with `name`. |
108
+
109
+ ### Slots
110
+
111
+ | Slot | Required | Allowed tag names | Description |
112
+ | --- | --- | --- | --- |
113
+ | _(default)_ | no | — | Default slot for the button label. |
114
+
115
+ ## Examples
116
+
117
+ | Example | When to use | File |
118
+ | --- | --- | --- |
119
+ | Default | Minimal default configuration. | [./examples/Default.ts](./examples/Default.ts) |
120
+ | Button Pure with custom clickable/focusable area | Sometimes it might be useful to enlarge the clickable/focusable area of a button to fulfill accessibility guidelines. | [./examples/CustomClickableArea.ts](./examples/CustomClickableArea.ts) |
121
+ | Form | When used as a submit button, the `name` and `value` props are submitted as a pair as part of the form data. | [./examples/Form.ts](./examples/Form.ts) |
122
+ | Form Attribute | When a button is used as a submit or reset button outside a form, the `form` attribute can be utilized to explicitly associate the button with a specific form element. | [./examples/FormAttribute.ts](./examples/FormAttribute.ts) |
@@ -0,0 +1,31 @@
1
+ # p-button-tile accessibility integration examples
2
+
3
+ ## Integration examples
4
+
5
+ ### ARIA on component host vs aria prop
6
+
7
+ #### ❌ Anti-pattern
8
+
9
+ ```html
10
+ <p-button-tile label="Open" aria-label="Open details of Porsche Taycan" aria-haspopup="dialog"></p-button-tile>
11
+ ```
12
+
13
+ #### ✅ Recommended
14
+
15
+ ```html
16
+ <p-button-tile label="Open" [aria]="{'aria-haspopup': 'dialog', 'aria-label': 'Open details of Porsche Taycan'}"></p-button-tile>
17
+ ```
18
+
19
+ ### Vague tile label without context
20
+
21
+ #### ❌ Anti-pattern
22
+
23
+ ```html
24
+ <p-button-tile label="Open"></p-button-tile>
25
+ ```
26
+
27
+ #### ✅ Recommended
28
+
29
+ ```html
30
+ <p-button-tile label="Configure Porsche Taycan"></p-button-tile>
31
+ ```
@@ -0,0 +1,18 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { PorscheDesignSystemModule } from '@porsche-design-system/components-angular';
3
+
4
+ @Component({
5
+ selector: 'porsche-design-system-app',
6
+ template: `
7
+ <p-button-tile label="Some label" description="Some Description" [gradient]="true">
8
+ <p-tag slot="header" color="background-frosted" [compact]="true" [style]="{'colorScheme': 'only light'}">
9
+ Some tag
10
+ </p-tag>
11
+ <img src="assets/lights.jpg" alt="Some image description" />
12
+ </p-button-tile>
13
+ `,
14
+ changeDetection: ChangeDetectionStrategy.OnPush,
15
+ standalone: true,
16
+ imports: [PorscheDesignSystemModule], // <-- PDS module is imported here
17
+ })
18
+ export class ExampleComponent {}
@@ -0,0 +1,21 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { PorscheDesignSystemModule } from '@porsche-design-system/components-angular';
3
+
4
+ @Component({
5
+ selector: 'porsche-design-system-app',
6
+ template: `
7
+ <p-button-tile label="Some label" description="Some Description" [gradient]="true">
8
+ <p-tag slot="header" color="background-frosted" [compact]="true">
9
+ Some tag
10
+ </p-tag>
11
+ <img src="assets/lights.jpg" alt="Some image description" />
12
+ <p-text slot="footer">
13
+ Some footer text
14
+ </p-text>
15
+ </p-button-tile>
16
+ `,
17
+ changeDetection: ChangeDetectionStrategy.OnPush,
18
+ standalone: true,
19
+ imports: [PorscheDesignSystemModule], // <-- PDS module is imported here
20
+ })
21
+ export class ExampleComponent {}
@@ -0,0 +1,32 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { PorscheDesignSystemModule } from '@porsche-design-system/components-angular';
3
+
4
+ @Component({
5
+ selector: 'porsche-design-system-app',
6
+ template: `
7
+ <div class="grid grid-cols-2 gap-static-md">
8
+ <p-button-tile label="Some label" description="Some Description">
9
+ <p-tag slot="header" color="background-frosted" [compact]="true">
10
+ Some tag
11
+ </p-tag>
12
+ <img src="assets/lights.jpg" alt="Some image description" />
13
+ <p-text slot="footer">
14
+ Some footer text
15
+ </p-text>
16
+ </p-button-tile>
17
+ <p-button-tile label="Some label" description="Some Description" [compact]="true">
18
+ <p-tag slot="header" color="background-frosted" [compact]="true">
19
+ Some tag
20
+ </p-tag>
21
+ <img src="assets/lights.jpg" alt="Some image description" />
22
+ <p-text slot="footer">
23
+ Some footer text
24
+ </p-text>
25
+ </p-button-tile>
26
+ </div>
27
+ `,
28
+ changeDetection: ChangeDetectionStrategy.OnPush,
29
+ standalone: true,
30
+ imports: [PorscheDesignSystemModule], // <-- PDS module is imported here
31
+ })
32
+ export class ExampleComponent {}
@@ -0,0 +1,38 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import {
3
+ PorscheDesignSystemModule,
4
+ PSelect,
5
+ type SelectChangeEventDetail,
6
+ } from '@porsche-design-system/components-angular';
7
+
8
+ @Component({
9
+ selector: 'porsche-design-system-app',
10
+ template: `
11
+ <p-select name="hyphens" label="Select hyphens" [value]="selectedValue" (change)="onChange($event)">
12
+ <p-select-option value="auto">style="hyphens: auto;"</p-select-option>
13
+ <p-select-option value="manual">style="hyphens: manual;"</p-select-option>
14
+ <p-select-option value="none">style="hyphens: none;"</p-select-option>
15
+ </p-select>
16
+
17
+ <p-button-tile
18
+ label="Some label"
19
+ description="An extra&shy;ordinarily Porsche"
20
+ [compact]="true"
21
+ size="inherit"
22
+ [style]="{ maxWidth: '400px', fontSize: '45px', hyphens: selectedValue }"
23
+ class="mt-fluid-sm"
24
+ >
25
+ <img src="assets/lights.jpg" alt="Some image description" />
26
+ </p-button-tile>
27
+ `,
28
+ changeDetection: ChangeDetectionStrategy.OnPush,
29
+ standalone: true,
30
+ imports: [PorscheDesignSystemModule],
31
+ })
32
+ export class ExampleComponent {
33
+ selectedValue: PSelect['value'] = 'auto';
34
+
35
+ onChange(e: CustomEvent<SelectChangeEventDetail>) {
36
+ this.selectedValue = e.detail.value;
37
+ }
38
+ }
@@ -0,0 +1,44 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { PorscheDesignSystemModule } from '@porsche-design-system/components-angular';
3
+
4
+ @Component({
5
+ selector: 'porsche-design-system-app',
6
+ template: `
7
+ <div class="grid grid-cols-2 gap-static-md">
8
+ <p-button-tile aspectRatio="4/3" label="Some Label" description="Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum." size="large">
9
+ <p-tag slot="header" color="background-frosted" compact="true">
10
+ 4/3
11
+ </p-tag>
12
+ <img src="assets/lights.jpg" alt="Some image description" />
13
+ </p-button-tile>
14
+ <p-button-tile aspectRatio="4/3" label="Some Label" description="Some description">
15
+ <p-tag slot="header" color="background-frosted" compact="true">
16
+ 4/3
17
+ </p-tag>
18
+ <img src="assets/lights.jpg" alt="Some image description" />
19
+ </p-button-tile>
20
+ <p-button-tile aspectRatio="1/1" label="Some Label" description="Some description">
21
+ <p-tag slot="header" color="background-frosted" compact="true">
22
+ 1/1
23
+ </p-tag>
24
+ <img src="assets/lights.jpg" alt="Some image description" />
25
+ </p-button-tile>
26
+ <p-button-tile aspectRatio="9/16" label="Some Label" description="Some description">
27
+ <p-tag slot="header" color="background-frosted" compact="true">
28
+ 9/16
29
+ </p-tag>
30
+ <img src="assets/lights.jpg" alt="Some image description" />
31
+ </p-button-tile>
32
+ <p-button-tile aspectRatio="1/1" label="Some Label" description="Some description">
33
+ <p-tag slot="header" color="background-frosted" compact="true">
34
+ 1/1
35
+ </p-tag>
36
+ <img src="assets/lights.jpg" alt="Some image description" />
37
+ </p-button-tile>
38
+ </div>
39
+ `,
40
+ changeDetection: ChangeDetectionStrategy.OnPush,
41
+ standalone: true,
42
+ imports: [PorscheDesignSystemModule], // <-- PDS module is imported here
43
+ })
44
+ export class ExampleComponent {}
@@ -0,0 +1,119 @@
1
+ # p-button-tile
2
+
3
+ The `p-button-tile` is an interactive component that displays a provided image to tease content and performs form or **interaction** events within one container. Whenever you want to provide navigational elements, stick to the [Link Tile](../p-link-tile/p-link-tile.md) component instead.
4
+
5
+ **Note:** The component does not take care of processing and aligning the image.
6
+
7
+ An `<img/>`, `<picture/>` or `<video/>` tag has to be provided as default slot.
8
+
9
+ Additionally, the properties `description` and `label` are required. The `description` property is used as a teaser with a more detailed description of the button and its action.
10
+
11
+ The `label` property is used to describe the button.
12
+
13
+ ## Usage
14
+
15
+ ### Do:
16
+
17
+ - Use Button Tile for **on-page interactivity**.
18
+ - Use [Link Tile](../p-link-tile/p-link-tile.md) instead if you want to **navigate** to another page.
19
+ - Use Button Tile with appropriate aspect ratios and short descriptions (80 characters or fewer).
20
+ - Use basic Button Tile for better perception tests and compact Button Tile for improved spacing (especially on mobile).
21
+ - Use gradient Button Tile when image contrast is insufficient and select images with natural contrast.
22
+ - Use font size for visual hierarchy and customize image type and font size for responsiveness.
23
+ - Use engaging verbs and product names in compact Button Tile.
24
+ - Create assets upfront for image processing.
25
+
26
+ ### Don't:
27
+
28
+ - Don't manipulate images, keep them natural and contrasted.
29
+ - Don't write long descriptions that overflow content (especially on mobile).
30
+
31
+ ## Accessibility support
32
+
33
+ ### Keyboard
34
+
35
+ | Key / state | Function |
36
+ | --- | --- |
37
+ | `Tab`, `Shift-Tab` | Moves focus to the next (or previous) focusable element. |
38
+ | `Enter`, `Space` | Activates the button. |
39
+ | `disabled` | Button still focusable. |
40
+
41
+ ### ARIA enhancements
42
+
43
+ #### External **ARIA** provided by the `aria` property:
44
+
45
+ | ARIA | Usage |
46
+ | --- | --- |
47
+ | `aria-label` | Defines a string value that labels an interactive element. It's required for buttons with `hideLabel="true"`. |
48
+ | `aria-description` | Defines a string value that adds a more detailed description of the interactive element. |
49
+ | `aria-expanded` | Exposes a visual state (e.g. expanded/collapsed) of another element. |
50
+ | `aria-pressed` | Exposes the `pressed` state of a toggle button. |
51
+ | `aria-haspopup` | Defines that the button opens a popup (e.g. `dialog`). It can be used in combination with `aria-expanded` to indicate the state of the popup. |
52
+
53
+ ## Limitations
54
+
55
+ Due to the nature of **Web Components** and **shadow DOM**, there are limitations when using some **ARIA** attributes to define relationships between elements across different shadow DOMs or shadow DOM/light DOM combinations.
56
+
57
+ | ARIA | Support |
58
+ | --- | --- |
59
+ | `aria-labelledby` | 🚫 |
60
+ | `aria-describedby` | 🚫 |
61
+ | `aria-owns` | 🚫 |
62
+ | `aria-controls` | 🚫 |
63
+ | `aria-activedescendant` | 🚫 |
64
+
65
+ ## Development considerations
66
+
67
+ ### Labelling
68
+
69
+ If the text of the button does not clearly indicate what the button's function is, add a brief, descriptive label using the `aria` property with the `aria-label` value to provide more context for screen reader users. Phrases like "Detail" or "Open" can be unclear when read out of context by a screen reader. In such instances, provide an alternative text that offers more detailed information, such as "Open details of product XYZ."
70
+
71
+ ### Common do's and don'ts
72
+
73
+ - **Do** pass ARIA attributes via the `aria` prop when the visible label needs more context.
74
+ - **Do** provide a descriptive `label` that explains the tile action.
75
+ - **Do** add `aria-label` on slotted `<video>` elements used as backgrounds.
76
+ - **Don't** add native `aria-*` attributes directly on the component host.
77
+
78
+ ## Integration examples
79
+
80
+ See [accessibility integration examples](./accessibility.md) for paired anti-pattern and recommended implementations.
81
+
82
+ ## API
83
+
84
+ ### Properties
85
+
86
+ | Property | Type | Default | Description |
87
+ | --- | --- | --- | --- |
88
+ | `align` | `'top'` `'bottom'` | `'bottom'` | Controls the vertical placement of the description and button — `top` or `bottom`. |
89
+ | `aria` | `ButtonTileAriaAttribute` | `undefined` | Sets ARIA attributes on the tile's action button to improve accessibility for screen readers. |
90
+ | `aspectRatio` | `'1/1'` `'4/3'` `'3/4'` `'16/9'` `'9/16'` `'auto'`<br>`BreakpointCustomizable<ButtonTileAspectRatio>` | `'4/3'` | Sets the width-to-height ratio of the tile media area. Supports responsive breakpoint values. |
91
+ | `compact` | `boolean`<br>`BreakpointCustomizable<boolean>` | `false` | Renders only the icon button without the full label. Supports responsive breakpoint values. |
92
+ | `description` _(required)_ | `string` | `undefined` | Sets the description text displayed in the tile's content area. |
93
+ | `disabled` | `boolean` | `false` | Disables the tile, preventing button interaction. |
94
+ | `gradient` | `boolean` | `false` | Shows a gradient overlay over the media slot to improve text legibility on bright images or videos. |
95
+ | `icon` | `'none'`<br>one of 290 icon names — see [icon names](references/icons.md) | `'none'` | Sets the icon displayed in the tile's action button. Use `none` to show no icon. |
96
+ | `iconSource` | `string` | `undefined` | Sets a path to a custom SVG icon for the action button, used instead of the built-in icon set. |
97
+ | `label` _(required)_ | `string` | `undefined` | Sets the accessible label text of the action button rendered inside the tile. |
98
+ | `loading` | `boolean` | `false` | Disables the tile and shows a loading spinner to indicate an ongoing operation. |
99
+ | `size` | `'medium'` `'large'` `'inherit'`<br>`BreakpointCustomizable<ButtonTileSize>` | `'medium'` | Sets the font size of the description text in the tile content area. Supports responsive breakpoint values. |
100
+ | `type` | `'button'` `'submit'` `'reset'` | `'submit'` | Sets the button's HTML type — `submit` sends the form, `reset` clears it, `button` performs no default action. |
101
+ | `weight` | `'regular'` `'semi-bold'`<br>`BreakpointCustomizable<ButtonTileWeight>` | `'semi-bold'` | Sets the font weight of the description text in the tile content area. Supports responsive breakpoint values. |
102
+
103
+ ### Slots
104
+
105
+ | Slot | Required | Allowed tag names | Description |
106
+ | --- | --- | --- | --- |
107
+ | `header` | no | — | Renders a header section above the content area. |
108
+ | _(default)_ | no | — | Default slot for the img or picture tag. |
109
+ | `footer` | no | — | Renders a footer section below the description. |
110
+
111
+ ## Examples
112
+
113
+ | Example | When to use | File |
114
+ | --- | --- | --- |
115
+ | Default | Minimal default configuration. | [./examples/Default.ts](./examples/Default.ts) |
116
+ | UI behaviour | The component is able to break out of its aspect ratio in case content overflows to be accessibility compliant (see first row in example). | [./examples/UiBehaviour.ts](./examples/UiBehaviour.ts) |
117
+ | Hyphens | It is possible to overwrite the hyphens style on the host element and use 'soft' hyphens. | [./examples/Hyphens.ts](./examples/Hyphens.ts) |
118
+ | Footer slot | You can also use a `footer` slot to display additional text below the description, providing more flexibility for custom content. | [./examples/FooterSlot.ts](./examples/FooterSlot.ts) |
119
+ | Color scheme | The component defines `color-scheme: dark` internally, independently of the scheme defined globally or on an ancestor outside the Button Tile. | [./examples/ColorScheme.ts](./examples/ColorScheme.ts) |