@porsche-design-system/components-react 4.6.0 → 4.7.0-beta.0

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 (173) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/esm/lib/components/button.wrapper.d.ts +2 -2
  3. package/esm/lib/types.d.ts +12 -7
  4. package/package.json +2 -2
  5. package/skills/pds-knowledge-react/SKILL.md +3 -3
  6. package/skills/pds-knowledge-react/references/components/p-button/examples/AiDropShadow.tsx +30 -0
  7. package/skills/pds-knowledge-react/references/components/p-button/examples/AiGradientGlow.tsx +90 -0
  8. package/skills/pds-knowledge-react/references/components/p-button/p-button.md +64 -2
  9. package/skills/pds-knowledge-react/references/components/p-button-pure/p-button-pure.md +1 -1
  10. package/skills/pds-knowledge-react/references/components/p-button-tile/p-button-tile.md +1 -1
  11. package/skills/pds-knowledge-react/references/components/p-icon/examples/Overview.tsx +2 -0
  12. package/skills/pds-knowledge-react/references/components/p-icon/p-icon.md +1 -1
  13. package/skills/pds-knowledge-react/references/components/p-inline-notification/p-inline-notification.md +1 -1
  14. package/skills/pds-knowledge-react/references/components/p-link/p-link.md +12 -1
  15. package/skills/pds-knowledge-react/references/components/p-link-pure/p-link-pure.md +1 -1
  16. package/skills/pds-knowledge-react/references/components/p-segmented-control/p-segmented-control.md +1 -1
  17. package/skills/pds-knowledge-react/references/components/p-tag/p-tag.md +1 -1
  18. package/skills/pds-knowledge-react/references/icons.md +1 -1
  19. package/ssr/cjs/components/dist/styles/esm/styles-entry.cjs +97 -42
  20. package/ssr/cjs/components/dist/utils/esm/utils-entry.cjs +2 -3
  21. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/accordion.cjs +1 -1
  22. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/ai-tag.cjs +1 -1
  23. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/banner.cjs +1 -1
  24. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/button-pure.cjs +1 -1
  25. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/button-tile.cjs +1 -1
  26. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/button.cjs +9 -1
  27. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/canvas.cjs +1 -1
  28. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/carousel.cjs +5 -1
  29. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/checkbox.cjs +1 -1
  30. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/crest.cjs +1 -1
  31. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/display.cjs +1 -1
  32. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/divider.cjs +1 -1
  33. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/drilldown-item.cjs +1 -1
  34. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/drilldown-link.cjs +1 -1
  35. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/drilldown.cjs +1 -1
  36. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/fieldset.cjs +1 -1
  37. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/flag.cjs +1 -1
  38. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/flyout.cjs +1 -1
  39. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/heading.cjs +1 -1
  40. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/icon.cjs +1 -1
  41. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/inline-notification.cjs +1 -1
  42. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-date.cjs +1 -1
  43. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-email.cjs +1 -1
  44. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-month.cjs +1 -1
  45. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-number.cjs +1 -1
  46. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-password.cjs +1 -1
  47. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-search.cjs +1 -1
  48. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-tel.cjs +1 -1
  49. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-text.cjs +1 -1
  50. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-time.cjs +1 -1
  51. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-url.cjs +1 -1
  52. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-week.cjs +1 -1
  53. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/link-pure.cjs +1 -1
  54. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/link-tile-product.cjs +1 -1
  55. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/link-tile.cjs +1 -1
  56. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/link.cjs +1 -1
  57. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/modal.cjs +1 -1
  58. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/model-signature.cjs +1 -1
  59. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/multi-select-option.cjs +1 -1
  60. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/multi-select.cjs +1 -1
  61. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/optgroup.cjs +1 -1
  62. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/pagination.cjs +1 -1
  63. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/pin-code.cjs +1 -1
  64. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/popover.cjs +1 -1
  65. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/radio-group-option.cjs +1 -1
  66. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/radio-group.cjs +1 -1
  67. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/scroller.cjs +1 -1
  68. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/segmented-control-item.cjs +1 -1
  69. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/segmented-control.cjs +1 -1
  70. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/select-option.cjs +1 -1
  71. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/select.cjs +1 -1
  72. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/sheet.cjs +1 -1
  73. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/spinner.cjs +1 -1
  74. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/stepper-horizontal-item.cjs +1 -1
  75. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/stepper-horizontal.cjs +1 -1
  76. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/switch.cjs +1 -1
  77. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/table-body.cjs +1 -1
  78. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/table-cell.cjs +1 -1
  79. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/table-head-cell.cjs +1 -1
  80. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/table-head-row.cjs +1 -1
  81. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/table-head.cjs +1 -1
  82. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/table-row.cjs +1 -1
  83. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/table.cjs +1 -1
  84. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/tabs-bar.cjs +1 -1
  85. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/tabs-item.cjs +1 -1
  86. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/tabs.cjs +1 -1
  87. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/tag-dismissible.cjs +1 -1
  88. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/tag.cjs +1 -1
  89. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/text-list-item.cjs +1 -1
  90. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/text-list.cjs +1 -1
  91. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/text.cjs +1 -1
  92. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/textarea.cjs +1 -1
  93. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/toast.cjs +1 -1
  94. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/wordmark.cjs +1 -1
  95. package/ssr/esm/components/dist/styles/esm/styles-entry.mjs +97 -42
  96. package/ssr/esm/components/dist/utils/esm/utils-entry.mjs +2 -3
  97. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/accordion.mjs +1 -1
  98. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/ai-tag.mjs +1 -1
  99. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/banner.mjs +1 -1
  100. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/button-pure.mjs +1 -1
  101. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/button-tile.mjs +1 -1
  102. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/button.mjs +9 -1
  103. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/canvas.mjs +1 -1
  104. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/carousel.mjs +5 -1
  105. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/checkbox.mjs +1 -1
  106. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/crest.mjs +1 -1
  107. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/display.mjs +1 -1
  108. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/divider.mjs +1 -1
  109. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/drilldown-item.mjs +1 -1
  110. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/drilldown-link.mjs +1 -1
  111. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/drilldown.mjs +1 -1
  112. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/fieldset.mjs +1 -1
  113. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/flag.mjs +1 -1
  114. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/flyout.mjs +1 -1
  115. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/heading.mjs +1 -1
  116. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/icon.mjs +1 -1
  117. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/inline-notification.mjs +1 -1
  118. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-date.mjs +1 -1
  119. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-email.mjs +1 -1
  120. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-month.mjs +1 -1
  121. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-number.mjs +1 -1
  122. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-password.mjs +1 -1
  123. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-search.mjs +1 -1
  124. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-tel.mjs +1 -1
  125. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-text.mjs +1 -1
  126. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-time.mjs +1 -1
  127. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-url.mjs +1 -1
  128. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/input-week.mjs +1 -1
  129. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/link-pure.mjs +1 -1
  130. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/link-tile-product.mjs +1 -1
  131. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/link-tile.mjs +1 -1
  132. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/link.mjs +1 -1
  133. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/modal.mjs +1 -1
  134. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/model-signature.mjs +1 -1
  135. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/multi-select-option.mjs +1 -1
  136. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/multi-select.mjs +1 -1
  137. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/optgroup.mjs +1 -1
  138. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/pagination.mjs +1 -1
  139. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/pin-code.mjs +1 -1
  140. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/popover.mjs +1 -1
  141. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/radio-group-option.mjs +1 -1
  142. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/radio-group.mjs +1 -1
  143. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/scroller.mjs +1 -1
  144. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/segmented-control-item.mjs +1 -1
  145. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/segmented-control.mjs +1 -1
  146. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/select-option.mjs +1 -1
  147. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/select.mjs +1 -1
  148. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/sheet.mjs +1 -1
  149. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/spinner.mjs +1 -1
  150. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/stepper-horizontal-item.mjs +1 -1
  151. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/stepper-horizontal.mjs +1 -1
  152. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/switch.mjs +1 -1
  153. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/table-body.mjs +1 -1
  154. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/table-cell.mjs +1 -1
  155. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/table-head-cell.mjs +1 -1
  156. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/table-head-row.mjs +1 -1
  157. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/table-head.mjs +1 -1
  158. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/table-row.mjs +1 -1
  159. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/table.mjs +1 -1
  160. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/tabs-bar.mjs +1 -1
  161. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/tabs-item.mjs +1 -1
  162. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/tabs.mjs +1 -1
  163. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/tag-dismissible.mjs +1 -1
  164. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/tag.mjs +1 -1
  165. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/text-list-item.mjs +1 -1
  166. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/text-list.mjs +1 -1
  167. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/text.mjs +1 -1
  168. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/textarea.mjs +1 -1
  169. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/toast.mjs +1 -1
  170. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/wordmark.mjs +1 -1
  171. package/ssr/esm/lib/components/button.wrapper.d.ts +2 -2
  172. package/ssr/esm/lib/dsr-components/button.d.ts +8 -0
  173. package/ssr/esm/lib/types.d.ts +12 -7
package/CHANGELOG.md CHANGED
@@ -14,6 +14,38 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0),
14
14
 
15
15
  ## [Unreleased]
16
16
 
17
+ ## [4.7.0-beta.0] - 2026-08-27
18
+
19
+ ### Added
20
+
21
+ - **Shadow DOM**: shadow roots are now attached with `clonable: true`, so `cloneNode(true)` on a component returns a
22
+ clone that carries its Shadow DOM content instead of an empty shadow root.
23
+ ([#4692](https://github.com/porsche-design-system/porsche-design-system/pull/4692))
24
+ - `Button`: `destructive` variant for actions with irreversible consequences, e.g. deleting data
25
+ ([#4693](https://github.com/porsche-design-system/porsche-design-system/pull/4693))
26
+ - `Button`, `Link`: `--p-button-bg`, `--p-button-fg`, `--p-link-bg` and `--p-link-fg` CSS variables to override the
27
+ background and foreground color in every state, including hover. You are responsible for ensuring sufficient contrast
28
+ and brand compliance. ([#4693](https://github.com/porsche-design-system/porsche-design-system/pull/4693))
29
+ - `Button`, `Link`: `--p-button-px`, `--p-button-py`, `--p-button-gap`, `--p-button-radius`, `--p-link-px`,
30
+ `--p-link-py`, `--p-link-gap` and `--p-link-radius` CSS variables to override horizontal padding, vertical padding,
31
+ the gap between label and icon as well as the border radius. You are responsible for ensuring a minimum target size of
32
+ 24px by 24px and brand compliance. ([#4693](https://github.com/porsche-design-system/porsche-design-system/pull/4693))
33
+ - `Icon`: `ai-chat` icon ([#4693](https://github.com/porsche-design-system/porsche-design-system/pull/4693))
34
+ - `Button`: (🧪Experimental) CSS custom state `loading` which can be targeted with the `:state()` pseudo-class, e.g.
35
+ `p-button:state(loading) { --p-button-bg: deeppink; }`. Browsers without support for `CustomStateSet` simply ignore
36
+ these rules. Be aware that custom states can't be expressed during server side rendering, they are only applied once
37
+ the component is hydrated on the client.
38
+ ([#4693](https://github.com/porsche-design-system/porsche-design-system/pull/4693))
39
+
40
+ ### Fixed
41
+
42
+ - `Carousel`: slides were dropped or left over when the amount of slides changed without also changing the amount of
43
+ pages, for example going from 1 to 2 slides at `slides-per-page="3"`. An added slide was never rendered and a removed
44
+ slide left an empty slot and a surplus pagination bullet behind.
45
+ ([#4686](https://github.com/porsche-design-system/porsche-design-system/pull/4686))
46
+ - `Carousel`: changing `slides-per-page` at runtime had no effect. Slide widths and the pagination kept the value the
47
+ carousel was initialised with. ([#4686](https://github.com/porsche-design-system/porsche-design-system/pull/4686))
48
+
17
49
  ## [4.6.0] - 2026-08-20
18
50
 
19
51
  ## [4.6.0-rc.3] - 2026-08-19
@@ -52,7 +52,7 @@ export type PButtonProps = BaseProps & {
52
52
  */
53
53
  value?: string;
54
54
  /**
55
- * Sets the visual style variant of the button (`primary` or `secondary`).
55
+ * Sets the visual style variant of the button (`primary`, `secondary` or `destructive`). Use `destructive` for actions with irreversible consequences, e.g. deleting data.
56
56
  * @default 'primary'
57
57
  */
58
58
  variant?: ButtonVariant;
@@ -109,7 +109,7 @@ export declare const PButton: import("react").ForwardRefExoticComponent<Omit<imp
109
109
  */
110
110
  value?: string;
111
111
  /**
112
- * Sets the visual style variant of the button (`primary` or `secondary`).
112
+ * Sets the visual style variant of the button (`primary`, `secondary` or `destructive`). Use `destructive` for actions with irreversible consequences, e.g. deleting data.
113
113
  * @default 'primary'
114
114
  */
115
115
  variant?: ButtonVariant;
@@ -253,6 +253,7 @@ declare const ICON_NAMES: readonly [
253
253
  "adjust",
254
254
  "aggregation",
255
255
  "ai-3d-object",
256
+ "ai-chat",
256
257
  "ai-code",
257
258
  "ai-edit",
258
259
  "ai-image",
@@ -768,14 +769,7 @@ declare const BUTTON_TYPES: readonly [
768
769
  "reset"
769
770
  ];
770
771
  export type ButtonType = (typeof BUTTON_TYPES)[number];
771
- declare const LINK_BUTTON_VARIANTS: readonly [
772
- "primary",
773
- "secondary"
774
- ];
775
- export type LinkButtonVariant = (typeof LINK_BUTTON_VARIANTS)[number];
776
772
  export type LinkButtonIconName = IconName | "none";
777
- export type ButtonVariant = LinkButtonVariant;
778
- export type LinkVariant = LinkButtonVariant;
779
773
  export type PorscheDesignSystem = {
780
774
  [key: `${number}.${number}.${number}${`-rc.${number}` | ""}`]: {
781
775
  prefixes: string[];
@@ -1000,6 +994,12 @@ declare const BANNER_HEADING_TAGS: readonly [
1000
994
  ];
1001
995
  export type BannerHeadingTag = (typeof BANNER_HEADING_TAGS)[number];
1002
996
  export type ButtonIcon = LinkButtonIconName;
997
+ declare const BUTTON_VARIANTS: readonly [
998
+ "primary",
999
+ "secondary",
1000
+ "destructive"
1001
+ ];
1002
+ export type ButtonVariant = (typeof BUTTON_VARIANTS)[number];
1003
1003
  export type ButtonPureType = ButtonType;
1004
1004
  export type ButtonPureIcon = LinkButtonIconName;
1005
1005
  export type ButtonPureAriaAttribute = ButtonAriaAttribute;
@@ -1363,6 +1363,11 @@ export type InputWeekChangeEventDetail = Event;
1363
1363
  export type InputWeekBlurEventDetail = Event;
1364
1364
  export type InputWeekInputEventDetail = InputEvent;
1365
1365
  export type LinkIcon = LinkButtonIconName;
1366
+ declare const LINK_VARIANTS: readonly [
1367
+ "primary",
1368
+ "secondary"
1369
+ ];
1370
+ export type LinkVariant = (typeof LINK_VARIANTS)[number];
1366
1371
  export type LinkPureIcon = LinkButtonIconName;
1367
1372
  export type LinkPureAriaAttribute = LinkAriaAttribute;
1368
1373
  export type LinkPureAlignLabel = AlignLabel;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@porsche-design-system/components-react",
3
- "version": "4.6.0",
3
+ "version": "4.7.0-beta.0",
4
4
  "description": "Porsche Design System is a component library designed to help developers create the best experience for software or services distributed by Dr. Ing. h.c. F. Porsche AG.",
5
5
  "keywords": [
6
6
  "porsche",
@@ -21,7 +21,7 @@
21
21
  "url": "https://github.com/porsche-design-system/porsche-design-system"
22
22
  },
23
23
  "dependencies": {
24
- "@porsche-design-system/components-js": "4.6.0"
24
+ "@porsche-design-system/components-js": "4.7.0-beta.0"
25
25
  },
26
26
  "peerDependencies": {
27
27
  "ag-grid-community": ">= 36.0.0 <37.0.0",
@@ -15,11 +15,11 @@ Prefer Porsche Design System components and tokens for new UI, even when the use
15
15
 
16
16
  This skill currently covers components, global stylesheets and theming, tokens, and styling integrations. It does not yet include complete getting-started, setup, and installation guidance; the v3-to-v4 migration guide; the changelog; partials; patterns and templates; the AG Grid theme; or the Storefront’s Must Know and Help sections.
17
17
 
18
- Before using documentation outside this skill or the installed package, match it to the installed PDS version. This skill was generated for `4.6.0`; prefer the [exact-version Porsche Design System Storefront](https://designsystem.porsche.com/v4.6.0/). Major-version URLs such as `/v4/` always serve the latest v4 release and may describe APIs or setup introduced after the installed version. Use them only as a fallback and verify relevant details against the installed package.
18
+ Before using documentation outside this skill or the installed package, match it to the installed PDS version. This skill was generated for `4.7.0-beta.0`; prefer the [exact-version Porsche Design System Storefront](https://designsystem.porsche.com/v4.7.0-beta.0/). Major-version URLs such as `/v4/` always serve the latest v4 release and may describe APIs or setup introduced after the installed version. Use them only as a fallback and verify relevant details against the installed package.
19
19
 
20
20
  For runnable patterns and templates, consult the [Porsche Design System examples repository](https://github.com/porsche-design-system/examples), selecting a release tag or commit that matches the installed package instead of assuming its default branch is compatible. For release-specific changes, read `../../CHANGELOG.md`.
21
21
 
22
- For exact API facts, inspect the installed typings and metadata first. When readable implementation details are necessary, use the [exact-version component source](https://github.com/porsche-design-system/porsche-design-system/tree/v4.6.0/packages/components/src/components) under the repository's `packages/components/src/components/<component>` directory. Do not use the default branch, which may represent a newer release.
22
+ For exact API facts, inspect the installed typings and metadata first. When readable implementation details are necessary, use the [exact-version component source](https://github.com/porsche-design-system/porsche-design-system/tree/v4.7.0-beta.0/packages/components/src/components) under the repository's `packages/components/src/components/<component>` directory. Do not use the default branch, which may represent a newer release.
23
23
 
24
24
  For deployed browser behavior, inspect component requests in the Network panel. Treat these minified, content-hashed CDN artifacts as a debugging fallback; use the exact-version repository source for readable implementation details.
25
25
 
@@ -110,7 +110,7 @@ import { PButton, PorscheDesignSystemProvider } from '@porsche-design-system/com
110
110
 
111
111
  On the server, the `/ssr` build emits component markup and styles as Declarative Shadow DOM so the browser can create the Shadow DOM before JavaScript runs. In the browser, it initializes like the standard React wrapper. The framework build must replace `process.browser` for its server and client targets and eliminate the unused branch.
112
112
 
113
- Framework setup differs. Follow the [Next.js integration guide](https://designsystem.porsche.com/v4.6.0/developing/next-js/getting-started/) or the [React Router integration guide](https://designsystem.porsche.com/v4.6.0/developing/react-router/getting-started/). Remix users should follow the React Router guidance because Remix v2 was upstreamed into React Router.
113
+ Framework setup differs. Follow the [Next.js integration guide](https://designsystem.porsche.com/v4.7.0-beta.0/developing/next-js/getting-started/) or the [React Router integration guide](https://designsystem.porsche.com/v4.7.0-beta.0/developing/react-router/getting-started/). Remix users should follow the React Router guidance because Remix v2 was upstreamed into React Router.
114
114
 
115
115
  ## Stylesheets
116
116
 
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import { PButton } from '@porsche-design-system/components-react';
3
+
4
+ export const Example = () => {
5
+ return (
6
+ <>
7
+ <style>
8
+ {` .custom-ai-shadow {
9
+ --p-button-bg: #fff;
10
+ --p-button-fg: #000;
11
+ box-shadow: var(--p-shadow-lg);
12
+ }
13
+
14
+ .custom-ai-shadow:not(:disabled, :state(loading)):hover {
15
+ --p-button-bg: var(--p-color-frosted-strong);
16
+ --p-button-fg: var(--p-color-primary);
17
+ }`}
18
+ </style>
19
+
20
+ <div className="flex flex-wrap gap-static-lg items-start">
21
+ <PButton className="custom-ai-shadow" icon="ai-chat" hideLabel={true}>
22
+ Ask AI assistant
23
+ </PButton>
24
+ <PButton className="custom-ai-shadow" icon="ai-chat">
25
+ Ask AI assistant
26
+ </PButton>
27
+ </div>
28
+ </>
29
+ )
30
+ }
@@ -0,0 +1,90 @@
1
+ import React from 'react';
2
+ import { PButton } from '@porsche-design-system/components-react';
3
+
4
+ export const Example = () => {
5
+ return (
6
+ <>
7
+ <style>
8
+ {` .custom-ai-orb {
9
+ --p-button-bg: var(--p-color-canvas);
10
+ --p-button-fg: var(--p-color-primary);
11
+ position: relative;
12
+ z-index: 0;
13
+ }
14
+
15
+ .custom-ai-orb:not(:disabled, :state(loading)):hover {
16
+ --p-button-bg: var(--p-color-frosted-strong);
17
+ --p-button-fg: var(--p-color-primary);
18
+ }
19
+
20
+ .custom-ai-orb::before,
21
+ .custom-ai-orb::after {
22
+ content: '';
23
+ position: absolute;
24
+ inset: 0;
25
+ z-index: -1;
26
+ border-radius: inherit;
27
+ background: linear-gradient(45deg, #00a8ff, #0151e1, #2ae3ff, #bff0ff, #0151e1, #00a8ff);
28
+ background-size: 400%;
29
+ animation: custom-ai-orb-gradient 20s linear infinite;
30
+ }
31
+
32
+ .custom-ai-orb::after {
33
+ filter: blur(10px);
34
+ animation:
35
+ custom-ai-orb-gradient 20s linear infinite,
36
+ custom-ai-orb-float 8s ease-in-out infinite;
37
+ }
38
+
39
+ @keyframes custom-ai-orb-gradient {
40
+ 0% {
41
+ background-position: 0 0;
42
+ }
43
+ 50% {
44
+ background-position: 300% 0;
45
+ }
46
+ 100% {
47
+ background-position: 0 0;
48
+ }
49
+ }
50
+
51
+ @keyframes custom-ai-orb-float {
52
+ 0% {
53
+ transform: scale(1) rotate(0deg);
54
+ }
55
+ 50% {
56
+ transform: scale(1.02) rotate(0.5deg);
57
+ }
58
+ 100% {
59
+ transform: scale(1) rotate(0deg);
60
+ }
61
+ }
62
+
63
+ /* Respect the user's motion preference */
64
+ @media (prefers-reduced-motion: reduce) {
65
+ .custom-ai-orb::before,
66
+ .custom-ai-orb::after {
67
+ animation: none;
68
+ }
69
+ }
70
+
71
+ /* Decorative gradient is not conveyed in forced-colors mode */
72
+ @media (forced-colors: active) {
73
+ .custom-ai-orb::before,
74
+ .custom-ai-orb::after {
75
+ display: none;
76
+ }
77
+ }`}
78
+ </style>
79
+
80
+ <div className="flex flex-wrap gap-static-lg items-start">
81
+ <PButton className="custom-ai-orb" icon="ai-chat" hideLabel={true}>
82
+ Ask AI assistant
83
+ </PButton>
84
+ <PButton className="custom-ai-orb" icon="ai-chat">
85
+ Ask AI assistant
86
+ </PButton>
87
+ </div>
88
+ </>
89
+ )
90
+ }
@@ -25,6 +25,55 @@ You can use native `click`, `focus`, `focusin`, `blur` and `focusout` events on
25
25
 
26
26
  ---
27
27
 
28
+ ## Custom states
29
+
30
+ 🧪 **Experimental**: The button exposes its loading state as a [CSS custom state](https://developer.mozilla.org/en-US/docs/Web/CSS/:state), which can be targeted with the `:state()` pseudo-class. This is handy to conditionally override the exposed CSS variables (e.g. `--p-button-bg` and `--p-button-fg`) without having to duplicate the state logic in your application.
31
+
32
+ | Custom state | Applied when |
33
+ | --- | --- |
34
+ | `loading` | `loading` is `true` |
35
+
36
+ ```scss
37
+ p-button:state(loading) {
38
+ --p-button-bg: light-dark(#025b3f, #21eeae);
39
+ --p-button-fg: light-dark(#21eeae, #025b3f);
40
+ }
41
+ ```
42
+
43
+ Custom states are a progressive enhancement: browsers without support for `CustomStateSet` or the `:state()` pseudo-class simply ignore these rules, the button keeps working and falls back to its default styling. Be aware that custom states can't be expressed during server side rendering, they are only applied once the component is hydrated on the client. Therefore, don't rely on `:state()` for styling that has to be correct on first paint.
44
+
45
+ For all other states and variants, use native CSS selectors instead:
46
+
47
+ | Styling target | Selector |
48
+ | --- | --- |
49
+ | Disabled | `p-button:disabled` (the button is form-associated) |
50
+ | Hover | `p-button:not(:disabled, :state(loading)):hover` |
51
+ | Focus | `p-button:focus-visible` |
52
+ | Variant | a custom class, e.g. `<p-button class="my-button" variant="secondary">` |
53
+
54
+ Since the button is a form-associated custom element, it is matched by the native `:disabled` pseudo-class as soon as the `disabled` attribute is set — no custom state is needed for it.
55
+
56
+ ```scss
57
+ p-button {
58
+ --p-button-bg: light-dark(#025b3f, #21eeae);
59
+ --p-button-fg: light-dark(#21eeae, #025b3f);
60
+ }
61
+
62
+ p-button:not(:disabled, :state(loading)):hover {
63
+ --p-button-bg: light-dark(#013d2a, #6ef7cf);
64
+ --p-button-fg: light-dark(#6ef7cf, #013d2a);
65
+ }
66
+
67
+ p-button:disabled {
68
+ --p-button-bg: light-dark(#6f3d0b, #ffaa4f);
69
+ --p-button-fg: light-dark(#ffaa4f, #6f3d0b);
70
+ }
71
+ ```
72
+
73
+ As with all color customizations, you are responsible for ensuring sufficient contrast and brand compliance.
74
+
75
+ ---
76
+
28
77
  ## Related components
29
78
 
30
79
  - [Links](../p-link/p-link.md)
@@ -99,13 +148,13 @@ See [accessibility integration examples](./accessibility.md) for paired anti-pat
99
148
  | `disabled` | `boolean` | `false` | Disables the button, preventing all interaction and blocking events. |
100
149
  | `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. |
101
150
  | `hideLabel` | `boolean`<br>`BreakpointCustomizable<boolean>` | `false` | Hides the visible label while keeping it accessible to screen readers. Supports responsive breakpoint values. |
102
- | `icon` | `'none'`<br>one of 293 icon names — see [icon names](references/icons.md) | `'none'` | Sets the icon displayed inside the button. Use `none` to show no icon. |
151
+ | `icon` | `'none'`<br>one of 294 icon names — see [icon names](references/icons.md) | `'none'` | Sets the icon displayed inside the button. Use `none` to show no icon. |
103
152
  | `iconSource` | `string` | `undefined` | Sets a path to a custom SVG icon, used instead of the built-in icon set. |
104
153
  | `loading` | `boolean` | `false` | Disables the button and replaces its content with a loading spinner to indicate an ongoing operation. |
105
154
  | `name` | `string` | `undefined` | Sets the name submitted with the form data when this button triggers form submission. |
106
155
  | `type` | `'button'` `'submit'` `'reset'` | `'submit'` | Sets the button's HTML type — `submit` sends the form, `reset` clears it, `button` performs no default action. |
107
156
  | `value` | `string` | `undefined` | Sets the value submitted with the form data when this button triggers form submission, paired with `name`. |
108
- | `variant` | `'primary'` `'secondary'` | `'primary'` | Sets the visual style variant of the button (`primary` or `secondary`). |
157
+ | `variant` | `'primary'` `'secondary'` `'destructive'` | `'primary'` | Sets the visual style variant of the button (`primary`, `secondary` or `destructive`). Use `destructive` for actions with irreversible consequences, e.g. deleting data. |
109
158
 
110
159
  ### Slots
111
160
 
@@ -113,6 +162,17 @@ See [accessibility integration examples](./accessibility.md) for paired anti-pat
113
162
  | --- | --- | --- | --- |
114
163
  | _(default)_ | no | — | Default slot for the button label. |
115
164
 
165
+ ### CSS Variables
166
+
167
+ | CSS Variable | Default | Description |
168
+ | --- | --- | --- |
169
+ | `--p-button-bg` | — | Overrides the background color of the button in every state, including hover. You are responsible for ensuring sufficient contrast and brand compliance. |
170
+ | `--p-button-fg` | — | Overrides the foreground color (label, icon and loading spinner) of the button in every state, including hover. You are responsible for ensuring sufficient contrast and brand compliance. |
171
+ | `--p-button-px` | — | Horizontal padding of the button. |
172
+ | `--p-button-py` | — | Vertical padding of the button. |
173
+ | `--p-button-gap` | — | Gap between the button's content (label and icon). |
174
+ | `--p-button-radius` | — | Radius of the button |
175
+
116
176
  ## Examples
117
177
 
118
178
  | Example | When to use | File |
@@ -120,3 +180,5 @@ See [accessibility integration examples](./accessibility.md) for paired anti-pat
120
180
  | Default | Minimal default configuration. | [./examples/Default.tsx](./examples/Default.tsx) |
121
181
  | 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.tsx](./examples/Form.tsx) |
122
182
  | 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.tsx](./examples/FormAttribute.tsx) |
183
+ | Custom AI Styling: Drop Shadow | 🧪 **Experimental**: This example shows what's technically possible with the exposed `--p-button-bg` and `--p-button-fg` CSS variables. | [./examples/AiDropShadow.tsx](./examples/AiDropShadow.tsx) |
184
+ | Custom AI Styling: Gradient Glow | 🧪 **Experimental**: This example demonstrates the technical possibilities of styling around the button host element. | [./examples/AiGradientGlow.tsx](./examples/AiGradientGlow.tsx) |
@@ -96,7 +96,7 @@ See [accessibility integration examples](./accessibility.md) for paired anti-pat
96
96
  | `disabled` | `boolean` | `false` | Disables the button, preventing all interaction and blocking events. |
97
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
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 293 icon names — see [icon names](references/icons.md) | `'arrow-right'` | Sets the icon displayed next to the label. |
99
+ | `icon` | `''`<br>one of 294 icon names — see [icon names](references/icons.md) | `'arrow-right'` | Sets the icon displayed next to the label. |
100
100
  | `iconSource` | `string` | `undefined` | Sets a path to a custom SVG icon, used instead of the built-in icon set. |
101
101
  | `loading` | `boolean` | `false` | Disables the button and replaces its icon with a loading spinner to indicate an ongoing operation. |
102
102
  | `name` | `string` | `undefined` | Sets the name submitted with the form data when this button triggers form submission. |
@@ -92,7 +92,7 @@ See [accessibility integration examples](./accessibility.md) for paired anti-pat
92
92
  | `description` _(required)_ | `string` | `undefined` | Sets the description text displayed in the tile's content area. |
93
93
  | `disabled` | `boolean` | `false` | Disables the tile, preventing button interaction. |
94
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 293 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. |
95
+ | `icon` | `'none'`<br>one of 294 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
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
97
  | `label` _(required)_ | `string` | `undefined` | Sets the accessible label text of the action button rendered inside the tile. |
98
98
  | `loading` | `boolean` | `false` | Disables the tile and shows a loading spinner to indicate an ongoing operation. |
@@ -20,6 +20,8 @@ export const Example = () => {
20
20
 
21
21
  <PIcon name="ai-3d-object" aria={{'aria-label': 'Ai 3d Object icon'}}></PIcon>
22
22
 
23
+ <PIcon name="ai-chat" aria={{'aria-label': 'Ai Chat icon'}}></PIcon>
24
+
23
25
  <PIcon name="ai-code" aria={{'aria-label': 'Ai Code icon'}}></PIcon>
24
26
 
25
27
  <PIcon name="ai-edit" aria={{'aria-label': 'Ai Edit icon'}}></PIcon>
@@ -67,7 +67,7 @@ See [accessibility integration examples](./accessibility.md) for paired anti-pat
67
67
  | --- | --- | --- | --- |
68
68
  | `aria` | `IconAriaAttribute` | `undefined` | Sets ARIA attributes on the icon — use `aria-label` to make the icon meaningful to screen readers when it conveys information. |
69
69
  | `color` | `'primary'` `'contrast-higher'` `'contrast-high'` `'contrast-medium'` `'contrast-low'` `'contrast-lower'` `'success'` `'warning'` `'error'` `'info'` `'inherit'` | `'primary'` | Sets the fill color of the icon using PDS color tokens. |
70
- | `name` | one of 293 icon names — see [icon names](references/icons.md) | `'arrow-right'` | Selects an icon from the built-in PDS icon library by name (e.g. `arrow-right`, `close`). |
70
+ | `name` | one of 294 icon names — see [icon names](references/icons.md) | `'arrow-right'` | Selects an icon from the built-in PDS icon library by name (e.g. `arrow-right`, `close`). |
71
71
  | `size` | `'2xs'` `'xs'` `'sm'` `'md'` `'lg'` `'xl'` `'2xl'` `'3xl'` `'4xl'` `'5xl'` `'inherit'`<br>_deprecated:_ `'xx-small'` `'x-small'` `'small'` `'medium'` `'large'` `'x-large'` `'xx-large'`<br>`BreakpointCustomizable<IconSize>` | `'sm'` | Sets the icon size using the PDS typographic scale. Use `inherit` to derive size from the parent element. Supports responsive breakpoint values. |
72
72
  | `source` | `string` | `undefined` | Sets a path to a custom SVG icon, used instead of the built-in icon library. |
73
73
 
@@ -46,7 +46,7 @@ See [accessibility integration examples](./accessibility.md) for paired anti-pat
46
46
 
47
47
  | Property | Type | Default | Description |
48
48
  | --- | --- | --- | --- |
49
- | `actionIcon` | `''`<br>one of 293 icon names — see [icon names](references/icons.md) | `'arrow-right'` | Sets the icon displayed inside the action button using a PDS icon name. |
49
+ | `actionIcon` | `''`<br>one of 294 icon names — see [icon names](references/icons.md) | `'arrow-right'` | Sets the icon displayed inside the action button using a PDS icon name. |
50
50
  | `actionLabel` | `string` | `undefined` | Sets the label text of the optional action button inside the notification. |
51
51
  | `actionLoading` | `boolean` | `false` | Disables the action button and shows a spinner to indicate an ongoing operation. |
52
52
  | `description` | `string` | `''` | Sets the supporting description text shown below the heading. |
@@ -84,7 +84,7 @@ See [accessibility integration examples](./accessibility.md) for paired anti-pat
84
84
  | `download` | `string` | `undefined` | Sets the native `download` attribute to trigger a file download. Only applies when `href` is set. |
85
85
  | `hideLabel` | `boolean`<br>`BreakpointCustomizable<boolean>` | `false` | Hides the visible label while keeping it accessible to screen readers. Supports responsive breakpoint values. |
86
86
  | `href` | `string` | `undefined` | When set, the component renders as an anchor navigating to this URL. Otherwise, provide a slotted anchor element. |
87
- | `icon` | `'none'`<br>one of 293 icon names — see [icon names](references/icons.md) | `'none'` | Sets the icon displayed next to the link label. Use `none` to show no icon. |
87
+ | `icon` | `'none'`<br>one of 294 icon names — see [icon names](references/icons.md) | `'none'` | Sets the icon displayed next to the link label. Use `none` to show no icon. |
88
88
  | `iconSource` | `string` | `undefined` | Sets a path to a custom SVG icon, used instead of the built-in icon set. |
89
89
  | `rel` | `string` | `undefined` | Sets the `rel` attribute on the link (e.g. `noopener`). Only applies when `href` is set. |
90
90
  | `target` | `'_self'` `'_blank'` `'_parent'` `'_top'` `'string'` | `'_self'` | Specifies where to open the linked URL (e.g. `_self`, `_blank`). Only applies when `href` is set. |
@@ -96,6 +96,17 @@ See [accessibility integration examples](./accessibility.md) for paired anti-pat
96
96
  | --- | --- | --- | --- |
97
97
  | _(default)_ | no | — | Default slot to render the link label. This slot can be used to slot an anchor tag instead of using the href prop. |
98
98
 
99
+ ### CSS Variables
100
+
101
+ | CSS Variable | Default | Description |
102
+ | --- | --- | --- |
103
+ | `--p-link-bg` | — | Overrides the background color of the link in every state, including hover. You are responsible for ensuring sufficient contrast and brand compliance. |
104
+ | `--p-link-fg` | — | Overrides the foreground color (label and icon) of the link in every state, including hover. You are responsible for ensuring sufficient contrast and brand compliance. |
105
+ | `--p-link-px` | — | Horizontal padding of the link. |
106
+ | `--p-link-py` | — | Vertical padding of the link. |
107
+ | `--p-link-gap` | — | Gap between the link's content (label and icon). |
108
+ | `--p-link-radius` | — | Radius of the link |
109
+
99
110
  ## Examples
100
111
 
101
112
  | Example | When to use | File |
@@ -89,7 +89,7 @@ See [accessibility integration examples](./accessibility.md) for paired anti-pat
89
89
  | `download` | `string` | `undefined` | Sets the native `download` attribute to trigger a file download. Only applies when `href` is set. |
90
90
  | `hideLabel` | `boolean`<br>`BreakpointCustomizable<boolean>` | `false` | Hides the visible label while keeping it accessible to screen readers. Supports responsive breakpoint values. |
91
91
  | `href` | `string` | `undefined` | When set, the component renders as an anchor navigating to this URL. Otherwise, provide a slotted anchor element. |
92
- | `icon` | `''`<br>one of 293 icon names — see [icon names](references/icons.md) | `'arrow-right'` | Sets the icon displayed next to the label. |
92
+ | `icon` | `''`<br>one of 294 icon names — see [icon names](references/icons.md) | `'arrow-right'` | Sets the icon displayed next to the label. |
93
93
  | `iconSource` | `string` | `undefined` | Sets a path to a custom SVG icon, used instead of the built-in icon set. |
94
94
  | `rel` | `string` | `undefined` | Sets the `rel` attribute on the link (e.g. `noopener`). Only applies when `href` is set. |
95
95
  | `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<LinkPureSize>` | `'sm'` | Sets the font size of the link label. Supports responsive breakpoint values. |
@@ -145,7 +145,7 @@ Allowed parent: `p-segmented-control`.
145
145
  | --- | --- | --- | --- |
146
146
  | `aria` | `SegmentedControlItemAriaAttribute` | `undefined` | Sets ARIA attributes on the item's button element to improve accessibility for screen readers. |
147
147
  | `disabled` | `boolean` | `false` | Prevents this item from being selected and visually dims it; the parent's value will not change to this item's value. |
148
- | `icon` | `''`<br>one of 293 icon names — see [icon names](references/icons.md) | `undefined` | Sets an icon rendered inside the item button using an icon name from the PDS icon library. |
148
+ | `icon` | `''`<br>one of 294 icon names — see [icon names](references/icons.md) | `undefined` | Sets an icon rendered inside the item button using an icon name from the PDS icon library. |
149
149
  | `iconSource` | `string` | `undefined` | Sets a URL to a custom SVG icon for the item button, overriding the built-in icon set. |
150
150
  | `label` | `string` | `undefined` | Sets a visible text label rendered inside the item button, used when no slotted content is provided. |
151
151
  | `value` _(required)_ | `string | number` | `undefined` | Sets the value emitted by the parent `p-segmented-control` when this item is selected. This property is*required**. |
@@ -50,7 +50,7 @@ See [accessibility integration examples](./accessibility.md) for paired anti-pat
50
50
  | Property | Type | Default | Description |
51
51
  | --- | --- | --- | --- |
52
52
  | `compact` | `boolean` | `false` | Reduces the tag's padding and height for use in dense layouts where vertical space is limited. |
53
- | `icon` | `'none'`<br>one of 293 icon names — see [icon names](references/icons.md) | `'none'` | Sets the icon displayed inside the tag alongside the label. Use `none` to render the tag without an icon. |
53
+ | `icon` | `'none'`<br>one of 294 icon names — see [icon names](references/icons.md) | `'none'` | Sets the icon displayed inside the tag alongside the label. Use `none` to render the tag without an icon. |
54
54
  | `iconSource` | `string` | `undefined` | Sets a URL to a custom SVG icon, overriding the built-in icon set when a brand-specific icon is needed. |
55
55
  | `variant` | `'primary'` `'secondary'` `'info'` `'info-frosted'` `'warning'` `'warning-frosted'` `'success'` `'success-frosted'` `'error'` `'error-frosted'` | `'secondary'` | Sets the visual style of the tag, which controls its background and text colors (e.g. `primary`, `secondary`, `notification-info`). |
56
56
 
@@ -2,4 +2,4 @@
2
2
 
3
3
  Valid values for the icon-typed props across PDS components (e.g. `p-icon` `name`, `p-button` `icon`, `p-link` `icon`, `p-inline-notification` `actionIcon`). Pass one as a string, e.g. `icon="arrow-right"`. Each component reference links here instead of repeating the full list. (`p-flag` `name` uses a separate set of flag names, not listed here.)
4
4
 
5
- `360` `4-wheel-drive` `accessibility` `active-cabin-ventilation` `add` `adjust` `aggregation` `ai-3d-object` `ai-code` `ai-edit` `ai-image` `ai-scale` `ai-sound` `ai-spark` `ai-spark-filled` `ai-text` `ai-video` `arrow-compact-down` `arrow-compact-left` `arrow-compact-right` `arrow-compact-up` `arrow-double-down` `arrow-double-left` `arrow-double-right` `arrow-double-up` `arrow-down` `arrow-down-left` `arrow-down-right` `arrow-first` `arrow-head-down` `arrow-head-left` `arrow-head-right` `arrow-head-up` `arrow-last` `arrow-left` `arrow-right` `arrow-up` `arrow-up-left` `arrow-up-right` `arrows` `attachment` `augmented-reality` `battery-empty` `battery-empty-co2` `battery-empty-fuel` `battery-full` `battery-half` `battery-one-quarter` `battery-three-quarters` `bell` `bookmark` `bookmark-filled` `brain` `broadcast` `cabriolet` `calculator` `calendar` `camera` `car` `car-battery` `card` `charging-active` `charging-network` `charging-state` `charging-station` `chart` `chat` `check` `city` `climate` `climate-control` `clock` `close` `closed-caption` `cloud` `co2-class` `co2-emission` `color-picker` `compare` `compass` `configurate` `connect-services` `copy` `country-road` `coupe` `cubic-capacity` `customer-support` `cut` `delete` `disable` `dislike` `dislike-filled` `document` `door` `download` `drag` `duration` `ear` `edit` `email` `error` `error-filled` `exclamation` `exclamation-filled` `external` `fast-backward` `fast-forward` `file-csv` `file-excel` `filter` `fingerprint` `flag` `flash` `fuel-station` `garage` `genuine-parts` `geo-localization` `gift` `globe` `grid` `grip` `group` `hand` `heart` `heart-filled` `highway` `highway-filled` `history` `home` `horn` `image` `increase` `information` `information-filled` `key` `laptop` `leaf` `leather` `light` `like` `like-filled` `limousine` `linked` `list` `locate` `lock` `lock-open` `logo-apple-carplay` `logo-apple-music` `logo-apple-podcast` `logo-baidu` `logo-delicious` `logo-digg` `logo-facebook` `logo-foursquare` `logo-gmail` `logo-google` `logo-hatena` `logo-instagram` `logo-kaixin` `logo-kakaotalk` `logo-kununu` `logo-linkedin` `logo-naver` `logo-pinterest` `logo-qq` `logo-qq-share` `logo-reddit` `logo-skyrock` `logo-snapchat` `logo-sohu` `logo-spotify` `logo-tecent` `logo-telegram` `logo-tiktok` `logo-tumblr` `logo-twitter` `logo-viber` `logo-vk` `logo-wechat` `logo-weibo` `logo-whatsapp` `logo-x` `logo-xing` `logo-yahoo` `logo-youku` `logo-youtube` `logout` `map` `menu-dots-horizontal` `menu-dots-vertical` `menu-lines` `microphone` `minus` `mobile` `moon` `new-chat` `news` `north-arrow` `oil-can` `online-search` `parking-brake` `parking-light` `paste` `pause` `phone` `pin` `pin-filled` `pivot` `play` `play-filled` `plug` `plus` `preheating` `price-tag` `printer` `purchase` `push-pin` `push-pin-off` `qr` `qr-off` `question` `question-filled` `racing-flag` `radar` `radio` `refresh` `replay` `reset` `return` `road` `roof-closed` `roof-open` `route` `rss` `save` `screen` `search` `seat` `send` `service-technician` `share` `shopping-bag` `shopping-bag-filled` `shopping-cart` `shopping-cart-filled` `shopping-cart-off` `sidebar` `sidelights` `skip-backward` `skip-forward` `snowflake` `sort` `stack` `star` `star-filled` `steering-wheel` `stop` `stopwatch` `subtract` `success` `success-filled` `sun` `suv` `switch` `tablet` `tachometer` `theme` `tire` `trigger-finger` `truck` `turismo` `unlinked` `upload` `user` `user-filled` `user-group` `user-manual` `video` `view` `view-off` `volume-off` `volume-up` `warning` `warning-filled` `weather` `weight` `wifi` `work` `wrench` `wrenches` `zoom-in` `zoom-out`
5
+ `360` `4-wheel-drive` `accessibility` `active-cabin-ventilation` `add` `adjust` `aggregation` `ai-3d-object` `ai-chat` `ai-code` `ai-edit` `ai-image` `ai-scale` `ai-sound` `ai-spark` `ai-spark-filled` `ai-text` `ai-video` `arrow-compact-down` `arrow-compact-left` `arrow-compact-right` `arrow-compact-up` `arrow-double-down` `arrow-double-left` `arrow-double-right` `arrow-double-up` `arrow-down` `arrow-down-left` `arrow-down-right` `arrow-first` `arrow-head-down` `arrow-head-left` `arrow-head-right` `arrow-head-up` `arrow-last` `arrow-left` `arrow-right` `arrow-up` `arrow-up-left` `arrow-up-right` `arrows` `attachment` `augmented-reality` `battery-empty` `battery-empty-co2` `battery-empty-fuel` `battery-full` `battery-half` `battery-one-quarter` `battery-three-quarters` `bell` `bookmark` `bookmark-filled` `brain` `broadcast` `cabriolet` `calculator` `calendar` `camera` `car` `car-battery` `card` `charging-active` `charging-network` `charging-state` `charging-station` `chart` `chat` `check` `city` `climate` `climate-control` `clock` `close` `closed-caption` `cloud` `co2-class` `co2-emission` `color-picker` `compare` `compass` `configurate` `connect-services` `copy` `country-road` `coupe` `cubic-capacity` `customer-support` `cut` `delete` `disable` `dislike` `dislike-filled` `document` `door` `download` `drag` `duration` `ear` `edit` `email` `error` `error-filled` `exclamation` `exclamation-filled` `external` `fast-backward` `fast-forward` `file-csv` `file-excel` `filter` `fingerprint` `flag` `flash` `fuel-station` `garage` `genuine-parts` `geo-localization` `gift` `globe` `grid` `grip` `group` `hand` `heart` `heart-filled` `highway` `highway-filled` `history` `home` `horn` `image` `increase` `information` `information-filled` `key` `laptop` `leaf` `leather` `light` `like` `like-filled` `limousine` `linked` `list` `locate` `lock` `lock-open` `logo-apple-carplay` `logo-apple-music` `logo-apple-podcast` `logo-baidu` `logo-delicious` `logo-digg` `logo-facebook` `logo-foursquare` `logo-gmail` `logo-google` `logo-hatena` `logo-instagram` `logo-kaixin` `logo-kakaotalk` `logo-kununu` `logo-linkedin` `logo-naver` `logo-pinterest` `logo-qq` `logo-qq-share` `logo-reddit` `logo-skyrock` `logo-snapchat` `logo-sohu` `logo-spotify` `logo-tecent` `logo-telegram` `logo-tiktok` `logo-tumblr` `logo-twitter` `logo-viber` `logo-vk` `logo-wechat` `logo-weibo` `logo-whatsapp` `logo-x` `logo-xing` `logo-yahoo` `logo-youku` `logo-youtube` `logout` `map` `menu-dots-horizontal` `menu-dots-vertical` `menu-lines` `microphone` `minus` `mobile` `moon` `new-chat` `news` `north-arrow` `oil-can` `online-search` `parking-brake` `parking-light` `paste` `pause` `phone` `pin` `pin-filled` `pivot` `play` `play-filled` `plug` `plus` `preheating` `price-tag` `printer` `purchase` `push-pin` `push-pin-off` `qr` `qr-off` `question` `question-filled` `racing-flag` `radar` `radio` `refresh` `replay` `reset` `return` `road` `roof-closed` `roof-open` `route` `rss` `save` `screen` `search` `seat` `send` `service-technician` `share` `shopping-bag` `shopping-bag-filled` `shopping-cart` `shopping-cart-filled` `shopping-cart-off` `sidebar` `sidelights` `skip-backward` `skip-forward` `snowflake` `sort` `stack` `star` `star-filled` `steering-wheel` `stop` `stopwatch` `subtract` `success` `success-filled` `sun` `suv` `switch` `tablet` `tachometer` `theme` `tire` `trigger-finger` `truck` `turismo` `unlinked` `upload` `user` `user-filled` `user-group` `user-manual` `video` `view` `view-off` `volume-off` `volume-up` `warning` `warning-filled` `weather` `weight` `wifi` `work` `wrench` `wrenches` `zoom-in` `zoom-out`