@porsche-design-system/components-angular 4.6.0 → 4.7.0-rc.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 (387) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/bin/pds-skill.js +50 -41
  3. package/fesm2022/porsche-design-system-components-angular.mjs.map +1 -1
  4. package/package.json +2 -2
  5. package/skills/pds-audit-deprecations-angular/SKILL.md +247 -0
  6. package/skills/pds-audit-deprecations-angular/references/report-template.md +128 -0
  7. package/skills/pds-audit-deprecations-angular/references/report.schema.json +446 -0
  8. package/skills/pds-knowledge-angular/SKILL.md +9 -3
  9. package/skills/pds-knowledge-angular/references/components/p-button/examples/AiDropShadow.ts +33 -0
  10. package/skills/pds-knowledge-angular/references/components/p-button/examples/AiGradientGlow.ts +93 -0
  11. package/skills/pds-knowledge-angular/references/components/p-button/p-button.md +64 -2
  12. package/skills/pds-knowledge-angular/references/components/p-button-pure/p-button-pure.md +1 -1
  13. package/skills/pds-knowledge-angular/references/components/p-button-tile/p-button-tile.md +1 -1
  14. package/skills/pds-knowledge-angular/references/components/p-icon/examples/Overview.ts +2 -0
  15. package/skills/pds-knowledge-angular/references/components/p-icon/p-icon.md +1 -1
  16. package/skills/pds-knowledge-angular/references/components/p-inline-notification/p-inline-notification.md +1 -1
  17. package/skills/pds-knowledge-angular/references/components/p-link/p-link.md +12 -1
  18. package/skills/pds-knowledge-angular/references/components/p-link-pure/p-link-pure.md +1 -1
  19. package/skills/pds-knowledge-angular/references/components/p-segmented-control/p-segmented-control.md +1 -1
  20. package/skills/pds-knowledge-angular/references/components/p-tag/p-tag.md +1 -1
  21. package/skills/pds-knowledge-angular/references/deprecations.md +686 -0
  22. package/skills/pds-knowledge-angular/references/icons.md +1 -1
  23. package/skills/pds-knowledge-angular/references/styles/scss.md +3 -2
  24. package/skills/pds-knowledge-angular/references/styles/tailwindcss.md +0 -2
  25. package/tailwindcss/index.css +16 -16
  26. package/types/porsche-design-system-components-angular.d.ts +14 -9
  27. package/vanilla-extract/cjs/blur/deprecated/frostedGlassStyle.cjs +1 -1
  28. package/vanilla-extract/cjs/border/deprecated/border.cjs +1 -1
  29. package/vanilla-extract/cjs/border/deprecated/borderRadius.cjs +1 -1
  30. package/vanilla-extract/cjs/border/deprecated/borderRadiusLarge.cjs +1 -1
  31. package/vanilla-extract/cjs/border/deprecated/borderRadiusMedium.cjs +1 -1
  32. package/vanilla-extract/cjs/border/deprecated/borderRadiusSmall.cjs +1 -1
  33. package/vanilla-extract/cjs/border/deprecated/borderWidth.cjs +1 -1
  34. package/vanilla-extract/cjs/border/deprecated/borderWidthBase.cjs +1 -1
  35. package/vanilla-extract/cjs/border/deprecated/borderWidthThin.cjs +1 -1
  36. package/vanilla-extract/cjs/color/deprecated/theme.cjs +1 -1
  37. package/vanilla-extract/cjs/color/deprecated/themeDark.cjs +1 -1
  38. package/vanilla-extract/cjs/color/deprecated/themeDarkBackgroundBase.cjs +1 -1
  39. package/vanilla-extract/cjs/color/deprecated/themeDarkBackgroundFrosted.cjs +1 -1
  40. package/vanilla-extract/cjs/color/deprecated/themeDarkBackgroundShading.cjs +1 -1
  41. package/vanilla-extract/cjs/color/deprecated/themeDarkBackgroundSurface.cjs +1 -1
  42. package/vanilla-extract/cjs/color/deprecated/themeDarkContrastHigh.cjs +1 -1
  43. package/vanilla-extract/cjs/color/deprecated/themeDarkContrastLow.cjs +1 -1
  44. package/vanilla-extract/cjs/color/deprecated/themeDarkContrastMedium.cjs +1 -1
  45. package/vanilla-extract/cjs/color/deprecated/themeDarkNotificationError.cjs +1 -1
  46. package/vanilla-extract/cjs/color/deprecated/themeDarkNotificationErrorSoft.cjs +1 -1
  47. package/vanilla-extract/cjs/color/deprecated/themeDarkNotificationInfo.cjs +1 -1
  48. package/vanilla-extract/cjs/color/deprecated/themeDarkNotificationInfoSoft.cjs +1 -1
  49. package/vanilla-extract/cjs/color/deprecated/themeDarkNotificationSuccess.cjs +1 -1
  50. package/vanilla-extract/cjs/color/deprecated/themeDarkNotificationSuccessSoft.cjs +1 -1
  51. package/vanilla-extract/cjs/color/deprecated/themeDarkNotificationWarning.cjs +1 -1
  52. package/vanilla-extract/cjs/color/deprecated/themeDarkNotificationWarningSoft.cjs +1 -1
  53. package/vanilla-extract/cjs/color/deprecated/themeDarkPrimary.cjs +1 -1
  54. package/vanilla-extract/cjs/color/deprecated/themeDarkStateActive.cjs +1 -1
  55. package/vanilla-extract/cjs/color/deprecated/themeDarkStateDisabled.cjs +1 -1
  56. package/vanilla-extract/cjs/color/deprecated/themeDarkStateFocus.cjs +1 -1
  57. package/vanilla-extract/cjs/color/deprecated/themeDarkStateHover.cjs +1 -1
  58. package/vanilla-extract/cjs/color/deprecated/themeLight.cjs +1 -1
  59. package/vanilla-extract/cjs/color/deprecated/themeLightBackgroundBase.cjs +1 -1
  60. package/vanilla-extract/cjs/color/deprecated/themeLightBackgroundFrosted.cjs +1 -1
  61. package/vanilla-extract/cjs/color/deprecated/themeLightBackgroundShading.cjs +1 -1
  62. package/vanilla-extract/cjs/color/deprecated/themeLightBackgroundSurface.cjs +1 -1
  63. package/vanilla-extract/cjs/color/deprecated/themeLightContrastHigh.cjs +1 -1
  64. package/vanilla-extract/cjs/color/deprecated/themeLightContrastLow.cjs +1 -1
  65. package/vanilla-extract/cjs/color/deprecated/themeLightContrastMedium.cjs +1 -1
  66. package/vanilla-extract/cjs/color/deprecated/themeLightNotificationError.cjs +1 -1
  67. package/vanilla-extract/cjs/color/deprecated/themeLightNotificationErrorSoft.cjs +1 -1
  68. package/vanilla-extract/cjs/color/deprecated/themeLightNotificationInfo.cjs +1 -1
  69. package/vanilla-extract/cjs/color/deprecated/themeLightNotificationInfoSoft.cjs +1 -1
  70. package/vanilla-extract/cjs/color/deprecated/themeLightNotificationSuccess.cjs +1 -1
  71. package/vanilla-extract/cjs/color/deprecated/themeLightNotificationSuccessSoft.cjs +1 -1
  72. package/vanilla-extract/cjs/color/deprecated/themeLightNotificationWarning.cjs +1 -1
  73. package/vanilla-extract/cjs/color/deprecated/themeLightNotificationWarningSoft.cjs +1 -1
  74. package/vanilla-extract/cjs/color/deprecated/themeLightPrimary.cjs +1 -1
  75. package/vanilla-extract/cjs/color/deprecated/themeLightStateActive.cjs +1 -1
  76. package/vanilla-extract/cjs/color/deprecated/themeLightStateDisabled.cjs +1 -1
  77. package/vanilla-extract/cjs/color/deprecated/themeLightStateFocus.cjs +1 -1
  78. package/vanilla-extract/cjs/color/deprecated/themeLightStateHover.cjs +1 -1
  79. package/vanilla-extract/cjs/focus/deprecated/getFocusStyle.cjs +1 -0
  80. package/vanilla-extract/cjs/font/deprecated/fontFamily.cjs +1 -1
  81. package/vanilla-extract/cjs/font/deprecated/fontLineHeight.cjs +1 -1
  82. package/vanilla-extract/cjs/font/deprecated/fontSize.cjs +1 -1
  83. package/vanilla-extract/cjs/font/deprecated/fontSizeDisplay.cjs +1 -1
  84. package/vanilla-extract/cjs/font/deprecated/fontSizeHeading.cjs +1 -1
  85. package/vanilla-extract/cjs/font/deprecated/fontSizeHeadingLarge.cjs +1 -1
  86. package/vanilla-extract/cjs/font/deprecated/fontSizeHeadingMedium.cjs +1 -1
  87. package/vanilla-extract/cjs/font/deprecated/fontSizeHeadingSmall.cjs +1 -1
  88. package/vanilla-extract/cjs/font/deprecated/fontSizeHeadingXLarge.cjs +1 -1
  89. package/vanilla-extract/cjs/font/deprecated/fontSizeHeadingXXLarge.cjs +1 -1
  90. package/vanilla-extract/cjs/font/deprecated/fontSizeText.cjs +1 -1
  91. package/vanilla-extract/cjs/font/deprecated/fontSizeTextLarge.cjs +1 -1
  92. package/vanilla-extract/cjs/font/deprecated/fontSizeTextMedium.cjs +1 -1
  93. package/vanilla-extract/cjs/font/deprecated/fontSizeTextSmall.cjs +1 -1
  94. package/vanilla-extract/cjs/font/deprecated/fontSizeTextXLarge.cjs +1 -1
  95. package/vanilla-extract/cjs/font/deprecated/fontSizeTextXSmall.cjs +1 -1
  96. package/vanilla-extract/cjs/font/deprecated/fontSizeTextXXSmall.cjs +1 -1
  97. package/vanilla-extract/cjs/font/deprecated/fontStyle.cjs +1 -1
  98. package/vanilla-extract/cjs/font/deprecated/fontStyleItalic.cjs +1 -1
  99. package/vanilla-extract/cjs/font/deprecated/fontStyleNormal.cjs +1 -1
  100. package/vanilla-extract/cjs/font/deprecated/fontVariant.cjs +1 -1
  101. package/vanilla-extract/cjs/font/deprecated/fontWeight.cjs +1 -1
  102. package/vanilla-extract/cjs/font/deprecated/fontWeightRegular.cjs +1 -1
  103. package/vanilla-extract/cjs/font/deprecated/fontWeightSemiBold.cjs +1 -1
  104. package/vanilla-extract/cjs/gradient/deprecated/gradientToBottomStyle.cjs +1 -1
  105. package/vanilla-extract/cjs/gradient/deprecated/gradientToLeftStyle.cjs +1 -1
  106. package/vanilla-extract/cjs/gradient/deprecated/gradientToRightStyle.cjs +1 -1
  107. package/vanilla-extract/cjs/gradient/deprecated/gradientToTopStyle.cjs +1 -1
  108. package/vanilla-extract/cjs/motion/deprecated/motionDurationLong.cjs +1 -1
  109. package/vanilla-extract/cjs/motion/deprecated/motionDurationModerate.cjs +1 -1
  110. package/vanilla-extract/cjs/motion/deprecated/motionDurationShort.cjs +1 -1
  111. package/vanilla-extract/cjs/motion/deprecated/motionDurationVeryLong.cjs +1 -1
  112. package/vanilla-extract/cjs/motion/deprecated/motionEasingBase.cjs +1 -1
  113. package/vanilla-extract/cjs/motion/deprecated/motionEasingIn.cjs +1 -1
  114. package/vanilla-extract/cjs/motion/deprecated/motionEasingOut.cjs +1 -1
  115. package/vanilla-extract/cjs/shadow/deprecated/dropShadowHighStyle.cjs +1 -1
  116. package/vanilla-extract/cjs/shadow/deprecated/dropShadowLowStyle.cjs +1 -1
  117. package/vanilla-extract/cjs/shadow/deprecated/dropShadowMediumStyle.cjs +1 -1
  118. package/vanilla-extract/cjs/spacing/deprecated/spacing.cjs +1 -1
  119. package/vanilla-extract/cjs/spacing/deprecated/spacingFluid.cjs +1 -1
  120. package/vanilla-extract/cjs/spacing/deprecated/spacingFluidLarge.cjs +1 -1
  121. package/vanilla-extract/cjs/spacing/deprecated/spacingFluidMedium.cjs +1 -1
  122. package/vanilla-extract/cjs/spacing/deprecated/spacingFluidSmall.cjs +1 -1
  123. package/vanilla-extract/cjs/spacing/deprecated/spacingFluidXLarge.cjs +1 -1
  124. package/vanilla-extract/cjs/spacing/deprecated/spacingFluidXSmall.cjs +1 -1
  125. package/vanilla-extract/cjs/spacing/deprecated/spacingFluidXXLarge.cjs +1 -1
  126. package/vanilla-extract/cjs/spacing/deprecated/spacingStatic.cjs +1 -1
  127. package/vanilla-extract/cjs/spacing/deprecated/spacingStaticLarge.cjs +1 -1
  128. package/vanilla-extract/cjs/spacing/deprecated/spacingStaticMedium.cjs +1 -1
  129. package/vanilla-extract/cjs/spacing/deprecated/spacingStaticSmall.cjs +1 -1
  130. package/vanilla-extract/cjs/spacing/deprecated/spacingStaticXLarge.cjs +1 -1
  131. package/vanilla-extract/cjs/spacing/deprecated/spacingStaticXSmall.cjs +1 -1
  132. package/vanilla-extract/cjs/spacing/deprecated/spacingStaticXXLarge.cjs +1 -1
  133. package/vanilla-extract/cjs/typography/deprecated/display/displayLargeStyle.cjs +1 -1
  134. package/vanilla-extract/cjs/typography/deprecated/display/displayMediumStyle.cjs +1 -1
  135. package/vanilla-extract/cjs/typography/deprecated/display/displaySmallStyle.cjs +1 -1
  136. package/vanilla-extract/cjs/typography/deprecated/heading/headingLargeStyle.cjs +1 -1
  137. package/vanilla-extract/cjs/typography/deprecated/heading/headingMediumStyle.cjs +1 -1
  138. package/vanilla-extract/cjs/typography/deprecated/heading/headingSmallStyle.cjs +1 -1
  139. package/vanilla-extract/cjs/typography/deprecated/heading/headingXLargeStyle.cjs +1 -1
  140. package/vanilla-extract/cjs/typography/deprecated/heading/headingXXLargeStyle.cjs +1 -1
  141. package/vanilla-extract/cjs/typography/deprecated/text/textLargeStyle.cjs +1 -1
  142. package/vanilla-extract/cjs/typography/deprecated/text/textMediumStyle.cjs +1 -1
  143. package/vanilla-extract/cjs/typography/deprecated/text/textSmallStyle.cjs +1 -1
  144. package/vanilla-extract/cjs/typography/deprecated/text/textXLargeStyle.cjs +1 -1
  145. package/vanilla-extract/cjs/typography/deprecated/text/textXSmallStyle.cjs +1 -1
  146. package/vanilla-extract/cjs/typography/deprecated/text/textXXSmallStyle.cjs +1 -1
  147. package/vanilla-extract/esm/blur/deprecated/frostedGlassStyle.d.ts +1 -1
  148. package/vanilla-extract/esm/blur/deprecated/frostedGlassStyle.mjs +1 -1
  149. package/vanilla-extract/esm/border/deprecated/border.d.ts +1 -1
  150. package/vanilla-extract/esm/border/deprecated/border.mjs +1 -1
  151. package/vanilla-extract/esm/border/deprecated/borderRadius.d.ts +1 -1
  152. package/vanilla-extract/esm/border/deprecated/borderRadius.mjs +1 -1
  153. package/vanilla-extract/esm/border/deprecated/borderRadiusLarge.d.ts +1 -1
  154. package/vanilla-extract/esm/border/deprecated/borderRadiusLarge.mjs +1 -1
  155. package/vanilla-extract/esm/border/deprecated/borderRadiusMedium.d.ts +1 -1
  156. package/vanilla-extract/esm/border/deprecated/borderRadiusMedium.mjs +1 -1
  157. package/vanilla-extract/esm/border/deprecated/borderRadiusSmall.d.ts +1 -1
  158. package/vanilla-extract/esm/border/deprecated/borderRadiusSmall.mjs +1 -1
  159. package/vanilla-extract/esm/border/deprecated/borderWidth.d.ts +1 -1
  160. package/vanilla-extract/esm/border/deprecated/borderWidth.mjs +1 -1
  161. package/vanilla-extract/esm/border/deprecated/borderWidthBase.d.ts +1 -1
  162. package/vanilla-extract/esm/border/deprecated/borderWidthBase.mjs +1 -1
  163. package/vanilla-extract/esm/border/deprecated/borderWidthThin.d.ts +1 -1
  164. package/vanilla-extract/esm/border/deprecated/borderWidthThin.mjs +1 -1
  165. package/vanilla-extract/esm/color/deprecated/theme.d.ts +1 -1
  166. package/vanilla-extract/esm/color/deprecated/theme.mjs +1 -1
  167. package/vanilla-extract/esm/color/deprecated/themeDark.d.ts +1 -1
  168. package/vanilla-extract/esm/color/deprecated/themeDark.mjs +1 -1
  169. package/vanilla-extract/esm/color/deprecated/themeDarkBackgroundBase.d.ts +1 -1
  170. package/vanilla-extract/esm/color/deprecated/themeDarkBackgroundBase.mjs +1 -1
  171. package/vanilla-extract/esm/color/deprecated/themeDarkBackgroundFrosted.d.ts +1 -1
  172. package/vanilla-extract/esm/color/deprecated/themeDarkBackgroundFrosted.mjs +1 -1
  173. package/vanilla-extract/esm/color/deprecated/themeDarkBackgroundShading.d.ts +1 -1
  174. package/vanilla-extract/esm/color/deprecated/themeDarkBackgroundShading.mjs +1 -1
  175. package/vanilla-extract/esm/color/deprecated/themeDarkBackgroundSurface.d.ts +1 -1
  176. package/vanilla-extract/esm/color/deprecated/themeDarkBackgroundSurface.mjs +1 -1
  177. package/vanilla-extract/esm/color/deprecated/themeDarkContrastHigh.d.ts +1 -1
  178. package/vanilla-extract/esm/color/deprecated/themeDarkContrastHigh.mjs +1 -1
  179. package/vanilla-extract/esm/color/deprecated/themeDarkContrastLow.d.ts +1 -1
  180. package/vanilla-extract/esm/color/deprecated/themeDarkContrastLow.mjs +1 -1
  181. package/vanilla-extract/esm/color/deprecated/themeDarkContrastMedium.d.ts +1 -1
  182. package/vanilla-extract/esm/color/deprecated/themeDarkContrastMedium.mjs +1 -1
  183. package/vanilla-extract/esm/color/deprecated/themeDarkNotificationError.d.ts +1 -1
  184. package/vanilla-extract/esm/color/deprecated/themeDarkNotificationError.mjs +1 -1
  185. package/vanilla-extract/esm/color/deprecated/themeDarkNotificationErrorSoft.d.ts +1 -1
  186. package/vanilla-extract/esm/color/deprecated/themeDarkNotificationErrorSoft.mjs +1 -1
  187. package/vanilla-extract/esm/color/deprecated/themeDarkNotificationInfo.d.ts +1 -1
  188. package/vanilla-extract/esm/color/deprecated/themeDarkNotificationInfo.mjs +1 -1
  189. package/vanilla-extract/esm/color/deprecated/themeDarkNotificationInfoSoft.d.ts +1 -1
  190. package/vanilla-extract/esm/color/deprecated/themeDarkNotificationInfoSoft.mjs +1 -1
  191. package/vanilla-extract/esm/color/deprecated/themeDarkNotificationSuccess.d.ts +1 -1
  192. package/vanilla-extract/esm/color/deprecated/themeDarkNotificationSuccess.mjs +1 -1
  193. package/vanilla-extract/esm/color/deprecated/themeDarkNotificationSuccessSoft.d.ts +1 -1
  194. package/vanilla-extract/esm/color/deprecated/themeDarkNotificationSuccessSoft.mjs +1 -1
  195. package/vanilla-extract/esm/color/deprecated/themeDarkNotificationWarning.d.ts +1 -1
  196. package/vanilla-extract/esm/color/deprecated/themeDarkNotificationWarning.mjs +1 -1
  197. package/vanilla-extract/esm/color/deprecated/themeDarkNotificationWarningSoft.d.ts +1 -1
  198. package/vanilla-extract/esm/color/deprecated/themeDarkNotificationWarningSoft.mjs +1 -1
  199. package/vanilla-extract/esm/color/deprecated/themeDarkPrimary.d.ts +1 -1
  200. package/vanilla-extract/esm/color/deprecated/themeDarkPrimary.mjs +1 -1
  201. package/vanilla-extract/esm/color/deprecated/themeDarkStateActive.d.ts +1 -1
  202. package/vanilla-extract/esm/color/deprecated/themeDarkStateActive.mjs +1 -1
  203. package/vanilla-extract/esm/color/deprecated/themeDarkStateDisabled.d.ts +1 -1
  204. package/vanilla-extract/esm/color/deprecated/themeDarkStateDisabled.mjs +1 -1
  205. package/vanilla-extract/esm/color/deprecated/themeDarkStateFocus.d.ts +1 -1
  206. package/vanilla-extract/esm/color/deprecated/themeDarkStateFocus.mjs +1 -1
  207. package/vanilla-extract/esm/color/deprecated/themeDarkStateHover.d.ts +1 -1
  208. package/vanilla-extract/esm/color/deprecated/themeDarkStateHover.mjs +1 -1
  209. package/vanilla-extract/esm/color/deprecated/themeLight.d.ts +1 -1
  210. package/vanilla-extract/esm/color/deprecated/themeLight.mjs +1 -1
  211. package/vanilla-extract/esm/color/deprecated/themeLightBackgroundBase.d.ts +1 -1
  212. package/vanilla-extract/esm/color/deprecated/themeLightBackgroundBase.mjs +1 -1
  213. package/vanilla-extract/esm/color/deprecated/themeLightBackgroundFrosted.d.ts +1 -1
  214. package/vanilla-extract/esm/color/deprecated/themeLightBackgroundFrosted.mjs +1 -1
  215. package/vanilla-extract/esm/color/deprecated/themeLightBackgroundShading.d.ts +1 -1
  216. package/vanilla-extract/esm/color/deprecated/themeLightBackgroundShading.mjs +1 -1
  217. package/vanilla-extract/esm/color/deprecated/themeLightBackgroundSurface.d.ts +1 -1
  218. package/vanilla-extract/esm/color/deprecated/themeLightBackgroundSurface.mjs +1 -1
  219. package/vanilla-extract/esm/color/deprecated/themeLightContrastHigh.d.ts +1 -1
  220. package/vanilla-extract/esm/color/deprecated/themeLightContrastHigh.mjs +1 -1
  221. package/vanilla-extract/esm/color/deprecated/themeLightContrastLow.d.ts +1 -1
  222. package/vanilla-extract/esm/color/deprecated/themeLightContrastLow.mjs +1 -1
  223. package/vanilla-extract/esm/color/deprecated/themeLightContrastMedium.d.ts +1 -1
  224. package/vanilla-extract/esm/color/deprecated/themeLightContrastMedium.mjs +1 -1
  225. package/vanilla-extract/esm/color/deprecated/themeLightNotificationError.d.ts +1 -1
  226. package/vanilla-extract/esm/color/deprecated/themeLightNotificationError.mjs +1 -1
  227. package/vanilla-extract/esm/color/deprecated/themeLightNotificationErrorSoft.d.ts +1 -1
  228. package/vanilla-extract/esm/color/deprecated/themeLightNotificationErrorSoft.mjs +1 -1
  229. package/vanilla-extract/esm/color/deprecated/themeLightNotificationInfo.d.ts +1 -1
  230. package/vanilla-extract/esm/color/deprecated/themeLightNotificationInfo.mjs +1 -1
  231. package/vanilla-extract/esm/color/deprecated/themeLightNotificationInfoSoft.d.ts +1 -1
  232. package/vanilla-extract/esm/color/deprecated/themeLightNotificationInfoSoft.mjs +1 -1
  233. package/vanilla-extract/esm/color/deprecated/themeLightNotificationSuccess.d.ts +1 -1
  234. package/vanilla-extract/esm/color/deprecated/themeLightNotificationSuccess.mjs +1 -1
  235. package/vanilla-extract/esm/color/deprecated/themeLightNotificationSuccessSoft.d.ts +1 -1
  236. package/vanilla-extract/esm/color/deprecated/themeLightNotificationSuccessSoft.mjs +1 -1
  237. package/vanilla-extract/esm/color/deprecated/themeLightNotificationWarning.d.ts +1 -1
  238. package/vanilla-extract/esm/color/deprecated/themeLightNotificationWarning.mjs +1 -1
  239. package/vanilla-extract/esm/color/deprecated/themeLightNotificationWarningSoft.d.ts +1 -1
  240. package/vanilla-extract/esm/color/deprecated/themeLightNotificationWarningSoft.mjs +1 -1
  241. package/vanilla-extract/esm/color/deprecated/themeLightPrimary.d.ts +1 -1
  242. package/vanilla-extract/esm/color/deprecated/themeLightPrimary.mjs +1 -1
  243. package/vanilla-extract/esm/color/deprecated/themeLightStateActive.d.ts +1 -1
  244. package/vanilla-extract/esm/color/deprecated/themeLightStateActive.mjs +1 -1
  245. package/vanilla-extract/esm/color/deprecated/themeLightStateDisabled.d.ts +1 -1
  246. package/vanilla-extract/esm/color/deprecated/themeLightStateDisabled.mjs +1 -1
  247. package/vanilla-extract/esm/color/deprecated/themeLightStateFocus.d.ts +1 -1
  248. package/vanilla-extract/esm/color/deprecated/themeLightStateFocus.mjs +1 -1
  249. package/vanilla-extract/esm/color/deprecated/themeLightStateHover.d.ts +1 -1
  250. package/vanilla-extract/esm/color/deprecated/themeLightStateHover.mjs +1 -1
  251. package/vanilla-extract/esm/color/deprecated/themeShared.d.ts +1 -1
  252. package/vanilla-extract/esm/focus/deprecated/getFocusStyle.d.ts +1 -0
  253. package/vanilla-extract/esm/focus/deprecated/getFocusStyle.mjs +1 -0
  254. package/vanilla-extract/esm/font/deprecated/fontFamily.d.ts +1 -1
  255. package/vanilla-extract/esm/font/deprecated/fontFamily.mjs +1 -1
  256. package/vanilla-extract/esm/font/deprecated/fontLineHeight.d.ts +1 -1
  257. package/vanilla-extract/esm/font/deprecated/fontLineHeight.mjs +1 -1
  258. package/vanilla-extract/esm/font/deprecated/fontSize.d.ts +1 -1
  259. package/vanilla-extract/esm/font/deprecated/fontSize.mjs +1 -1
  260. package/vanilla-extract/esm/font/deprecated/fontSizeDisplay.d.ts +1 -1
  261. package/vanilla-extract/esm/font/deprecated/fontSizeDisplay.mjs +1 -1
  262. package/vanilla-extract/esm/font/deprecated/fontSizeHeading.d.ts +1 -1
  263. package/vanilla-extract/esm/font/deprecated/fontSizeHeading.mjs +1 -1
  264. package/vanilla-extract/esm/font/deprecated/fontSizeHeadingLarge.d.ts +1 -1
  265. package/vanilla-extract/esm/font/deprecated/fontSizeHeadingLarge.mjs +1 -1
  266. package/vanilla-extract/esm/font/deprecated/fontSizeHeadingMedium.d.ts +1 -1
  267. package/vanilla-extract/esm/font/deprecated/fontSizeHeadingMedium.mjs +1 -1
  268. package/vanilla-extract/esm/font/deprecated/fontSizeHeadingSmall.d.ts +1 -1
  269. package/vanilla-extract/esm/font/deprecated/fontSizeHeadingSmall.mjs +1 -1
  270. package/vanilla-extract/esm/font/deprecated/fontSizeHeadingXLarge.d.ts +1 -1
  271. package/vanilla-extract/esm/font/deprecated/fontSizeHeadingXLarge.mjs +1 -1
  272. package/vanilla-extract/esm/font/deprecated/fontSizeHeadingXXLarge.d.ts +1 -1
  273. package/vanilla-extract/esm/font/deprecated/fontSizeHeadingXXLarge.mjs +1 -1
  274. package/vanilla-extract/esm/font/deprecated/fontSizeText.d.ts +1 -1
  275. package/vanilla-extract/esm/font/deprecated/fontSizeText.mjs +1 -1
  276. package/vanilla-extract/esm/font/deprecated/fontSizeTextLarge.d.ts +1 -1
  277. package/vanilla-extract/esm/font/deprecated/fontSizeTextLarge.mjs +1 -1
  278. package/vanilla-extract/esm/font/deprecated/fontSizeTextMedium.d.ts +1 -1
  279. package/vanilla-extract/esm/font/deprecated/fontSizeTextMedium.mjs +1 -1
  280. package/vanilla-extract/esm/font/deprecated/fontSizeTextSmall.d.ts +1 -1
  281. package/vanilla-extract/esm/font/deprecated/fontSizeTextSmall.mjs +1 -1
  282. package/vanilla-extract/esm/font/deprecated/fontSizeTextXLarge.d.ts +1 -1
  283. package/vanilla-extract/esm/font/deprecated/fontSizeTextXLarge.mjs +1 -1
  284. package/vanilla-extract/esm/font/deprecated/fontSizeTextXSmall.d.ts +1 -1
  285. package/vanilla-extract/esm/font/deprecated/fontSizeTextXSmall.mjs +1 -1
  286. package/vanilla-extract/esm/font/deprecated/fontSizeTextXXSmall.d.ts +1 -1
  287. package/vanilla-extract/esm/font/deprecated/fontSizeTextXXSmall.mjs +1 -1
  288. package/vanilla-extract/esm/font/deprecated/fontStyle.d.ts +1 -1
  289. package/vanilla-extract/esm/font/deprecated/fontStyle.mjs +1 -1
  290. package/vanilla-extract/esm/font/deprecated/fontStyleItalic.d.ts +1 -1
  291. package/vanilla-extract/esm/font/deprecated/fontStyleItalic.mjs +1 -1
  292. package/vanilla-extract/esm/font/deprecated/fontStyleNormal.d.ts +1 -1
  293. package/vanilla-extract/esm/font/deprecated/fontStyleNormal.mjs +1 -1
  294. package/vanilla-extract/esm/font/deprecated/fontVariant.d.ts +1 -1
  295. package/vanilla-extract/esm/font/deprecated/fontVariant.mjs +1 -1
  296. package/vanilla-extract/esm/font/deprecated/fontWeight.d.ts +1 -1
  297. package/vanilla-extract/esm/font/deprecated/fontWeight.mjs +1 -1
  298. package/vanilla-extract/esm/font/deprecated/fontWeightRegular.d.ts +1 -1
  299. package/vanilla-extract/esm/font/deprecated/fontWeightRegular.mjs +1 -1
  300. package/vanilla-extract/esm/font/deprecated/fontWeightSemiBold.d.ts +1 -1
  301. package/vanilla-extract/esm/font/deprecated/fontWeightSemiBold.mjs +1 -1
  302. package/vanilla-extract/esm/gradient/deprecated/gradientToBottomStyle.d.ts +1 -1
  303. package/vanilla-extract/esm/gradient/deprecated/gradientToBottomStyle.mjs +1 -1
  304. package/vanilla-extract/esm/gradient/deprecated/gradientToLeftStyle.d.ts +1 -1
  305. package/vanilla-extract/esm/gradient/deprecated/gradientToLeftStyle.mjs +1 -1
  306. package/vanilla-extract/esm/gradient/deprecated/gradientToRightStyle.d.ts +1 -1
  307. package/vanilla-extract/esm/gradient/deprecated/gradientToRightStyle.mjs +1 -1
  308. package/vanilla-extract/esm/gradient/deprecated/gradientToTopStyle.d.ts +1 -1
  309. package/vanilla-extract/esm/gradient/deprecated/gradientToTopStyle.mjs +1 -1
  310. package/vanilla-extract/esm/motion/deprecated/motionDurationLong.d.ts +1 -1
  311. package/vanilla-extract/esm/motion/deprecated/motionDurationLong.mjs +1 -1
  312. package/vanilla-extract/esm/motion/deprecated/motionDurationModerate.d.ts +1 -1
  313. package/vanilla-extract/esm/motion/deprecated/motionDurationModerate.mjs +1 -1
  314. package/vanilla-extract/esm/motion/deprecated/motionDurationShort.d.ts +1 -1
  315. package/vanilla-extract/esm/motion/deprecated/motionDurationShort.mjs +1 -1
  316. package/vanilla-extract/esm/motion/deprecated/motionDurationVeryLong.d.ts +1 -1
  317. package/vanilla-extract/esm/motion/deprecated/motionDurationVeryLong.mjs +1 -1
  318. package/vanilla-extract/esm/motion/deprecated/motionEasingBase.d.ts +1 -1
  319. package/vanilla-extract/esm/motion/deprecated/motionEasingBase.mjs +1 -1
  320. package/vanilla-extract/esm/motion/deprecated/motionEasingIn.d.ts +1 -1
  321. package/vanilla-extract/esm/motion/deprecated/motionEasingIn.mjs +1 -1
  322. package/vanilla-extract/esm/motion/deprecated/motionEasingOut.d.ts +1 -1
  323. package/vanilla-extract/esm/motion/deprecated/motionEasingOut.mjs +1 -1
  324. package/vanilla-extract/esm/shadow/deprecated/dropShadowHighStyle.d.ts +1 -1
  325. package/vanilla-extract/esm/shadow/deprecated/dropShadowHighStyle.mjs +1 -1
  326. package/vanilla-extract/esm/shadow/deprecated/dropShadowLowStyle.d.ts +1 -1
  327. package/vanilla-extract/esm/shadow/deprecated/dropShadowLowStyle.mjs +1 -1
  328. package/vanilla-extract/esm/shadow/deprecated/dropShadowMediumStyle.d.ts +1 -1
  329. package/vanilla-extract/esm/shadow/deprecated/dropShadowMediumStyle.mjs +1 -1
  330. package/vanilla-extract/esm/spacing/deprecated/spacing.d.ts +1 -1
  331. package/vanilla-extract/esm/spacing/deprecated/spacing.mjs +1 -1
  332. package/vanilla-extract/esm/spacing/deprecated/spacingFluid.d.ts +1 -1
  333. package/vanilla-extract/esm/spacing/deprecated/spacingFluid.mjs +1 -1
  334. package/vanilla-extract/esm/spacing/deprecated/spacingFluidLarge.d.ts +1 -1
  335. package/vanilla-extract/esm/spacing/deprecated/spacingFluidLarge.mjs +1 -1
  336. package/vanilla-extract/esm/spacing/deprecated/spacingFluidMedium.d.ts +1 -1
  337. package/vanilla-extract/esm/spacing/deprecated/spacingFluidMedium.mjs +1 -1
  338. package/vanilla-extract/esm/spacing/deprecated/spacingFluidSmall.d.ts +1 -1
  339. package/vanilla-extract/esm/spacing/deprecated/spacingFluidSmall.mjs +1 -1
  340. package/vanilla-extract/esm/spacing/deprecated/spacingFluidXLarge.d.ts +1 -1
  341. package/vanilla-extract/esm/spacing/deprecated/spacingFluidXLarge.mjs +1 -1
  342. package/vanilla-extract/esm/spacing/deprecated/spacingFluidXSmall.d.ts +1 -1
  343. package/vanilla-extract/esm/spacing/deprecated/spacingFluidXSmall.mjs +1 -1
  344. package/vanilla-extract/esm/spacing/deprecated/spacingFluidXXLarge.d.ts +1 -1
  345. package/vanilla-extract/esm/spacing/deprecated/spacingFluidXXLarge.mjs +1 -1
  346. package/vanilla-extract/esm/spacing/deprecated/spacingStatic.d.ts +1 -1
  347. package/vanilla-extract/esm/spacing/deprecated/spacingStatic.mjs +1 -1
  348. package/vanilla-extract/esm/spacing/deprecated/spacingStaticLarge.d.ts +1 -1
  349. package/vanilla-extract/esm/spacing/deprecated/spacingStaticLarge.mjs +1 -1
  350. package/vanilla-extract/esm/spacing/deprecated/spacingStaticMedium.d.ts +1 -1
  351. package/vanilla-extract/esm/spacing/deprecated/spacingStaticMedium.mjs +1 -1
  352. package/vanilla-extract/esm/spacing/deprecated/spacingStaticSmall.d.ts +1 -1
  353. package/vanilla-extract/esm/spacing/deprecated/spacingStaticSmall.mjs +1 -1
  354. package/vanilla-extract/esm/spacing/deprecated/spacingStaticXLarge.d.ts +1 -1
  355. package/vanilla-extract/esm/spacing/deprecated/spacingStaticXLarge.mjs +1 -1
  356. package/vanilla-extract/esm/spacing/deprecated/spacingStaticXSmall.d.ts +1 -1
  357. package/vanilla-extract/esm/spacing/deprecated/spacingStaticXSmall.mjs +1 -1
  358. package/vanilla-extract/esm/spacing/deprecated/spacingStaticXXLarge.d.ts +1 -1
  359. package/vanilla-extract/esm/spacing/deprecated/spacingStaticXXLarge.mjs +1 -1
  360. package/vanilla-extract/esm/typography/deprecated/display/displayLargeStyle.d.ts +1 -1
  361. package/vanilla-extract/esm/typography/deprecated/display/displayLargeStyle.mjs +1 -1
  362. package/vanilla-extract/esm/typography/deprecated/display/displayMediumStyle.d.ts +1 -1
  363. package/vanilla-extract/esm/typography/deprecated/display/displayMediumStyle.mjs +1 -1
  364. package/vanilla-extract/esm/typography/deprecated/display/displaySmallStyle.d.ts +1 -1
  365. package/vanilla-extract/esm/typography/deprecated/display/displaySmallStyle.mjs +1 -1
  366. package/vanilla-extract/esm/typography/deprecated/heading/headingLargeStyle.d.ts +1 -1
  367. package/vanilla-extract/esm/typography/deprecated/heading/headingLargeStyle.mjs +1 -1
  368. package/vanilla-extract/esm/typography/deprecated/heading/headingMediumStyle.d.ts +1 -1
  369. package/vanilla-extract/esm/typography/deprecated/heading/headingMediumStyle.mjs +1 -1
  370. package/vanilla-extract/esm/typography/deprecated/heading/headingSmallStyle.d.ts +1 -1
  371. package/vanilla-extract/esm/typography/deprecated/heading/headingSmallStyle.mjs +1 -1
  372. package/vanilla-extract/esm/typography/deprecated/heading/headingXLargeStyle.d.ts +1 -1
  373. package/vanilla-extract/esm/typography/deprecated/heading/headingXLargeStyle.mjs +1 -1
  374. package/vanilla-extract/esm/typography/deprecated/heading/headingXXLargeStyle.d.ts +1 -1
  375. package/vanilla-extract/esm/typography/deprecated/heading/headingXXLargeStyle.mjs +1 -1
  376. package/vanilla-extract/esm/typography/deprecated/text/textLargeStyle.d.ts +1 -1
  377. package/vanilla-extract/esm/typography/deprecated/text/textLargeStyle.mjs +1 -1
  378. package/vanilla-extract/esm/typography/deprecated/text/textMediumStyle.d.ts +1 -1
  379. package/vanilla-extract/esm/typography/deprecated/text/textMediumStyle.mjs +1 -1
  380. package/vanilla-extract/esm/typography/deprecated/text/textSmallStyle.d.ts +1 -1
  381. package/vanilla-extract/esm/typography/deprecated/text/textSmallStyle.mjs +1 -1
  382. package/vanilla-extract/esm/typography/deprecated/text/textXLargeStyle.d.ts +1 -1
  383. package/vanilla-extract/esm/typography/deprecated/text/textXLargeStyle.mjs +1 -1
  384. package/vanilla-extract/esm/typography/deprecated/text/textXSmallStyle.d.ts +1 -1
  385. package/vanilla-extract/esm/typography/deprecated/text/textXSmallStyle.mjs +1 -1
  386. package/vanilla-extract/esm/typography/deprecated/text/textXXSmallStyle.d.ts +1 -1
  387. package/vanilla-extract/esm/typography/deprecated/text/textXXSmallStyle.mjs +1 -1
package/CHANGELOG.md CHANGED
@@ -14,6 +14,71 @@ 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-rc.0] - 2026-09-09
18
+
19
+ ### Added
20
+
21
+ - `Audit Deprecations Skill`: new skill shipped as `pds-audit-deprecations-{js|angular|react|vue}` in the package's
22
+ `skills/` directory. Invoke it to audit a project for deprecated Porsche Design System API usage; it writes its report
23
+ below `.pds/audits/` and never changes your code
24
+ ([#4645](https://github.com/porsche-design-system/porsche-design-system/pull/4645))
25
+ - `Knowledge Skill`: `references/deprecations.md`, a version-exact index of every deprecated component, prop, prop
26
+ value, event, slot, CSS variable and styling alias together with what to use instead
27
+ ([#4645](https://github.com/porsche-design-system/porsche-design-system/pull/4645))
28
+ - **Partials**: `getMetaTagsAndIconLinks()` now links a webmanifest with maskable icons for Android PWA installation
29
+ ([#4709](https://github.com/porsche-design-system/porsche-design-system/pull/4709))
30
+
31
+ ### Changed
32
+
33
+ - `pds-skill`: Skill links are now created with a relative target on macOS and Linux, so they stay valid across
34
+ symlink-capable clones and in CI and can be committed. Re-run the command to migrate links created by an earlier
35
+ version. Windows keeps using directory junctions, which cannot be relative
36
+ ([#4645](https://github.com/porsche-design-system/porsche-design-system/pull/4645))
37
+
38
+ ### Fixed
39
+
40
+ - **Breakpoint Customizable Props**: setting a breakpoint customizable boolean prop as an HTML boolean attribute without
41
+ a value, e.g. `<p-input-text hide-label>`, was ignored and logged a validation error instead of behaving like
42
+ `<p-input-text hide-label="true">`. Affects `hide-label`, `stretch`, `indent`, `fullscreen`, `pagination` and
43
+ `compact` (the latter only on `Button`, `Link`, `Link Tile` and `Button Tile`, where it is breakpoint customizable).
44
+ ([#4701](https://github.com/porsche-design-system/porsche-design-system/pull/4701))
45
+ - **React Server Components**: prerendering crashed with `Cannot use 'in' operator to search for 'type' in null` when a
46
+ component from `@porsche-design-system/components-react/ssr` received `null` as its only child, e.g.
47
+ `<PTableCell>{cond ? <PIcon /> : null}</PTableCell>`
48
+ ([#4685](https://github.com/porsche-design-system/porsche-design-system/pull/4685))
49
+
50
+ ## [4.7.0-beta.0] - 2026-08-27
51
+
52
+ ### Added
53
+
54
+ - **Shadow DOM**: shadow roots are now attached with `clonable: true`, so `cloneNode(true)` on a component returns a
55
+ clone that carries its Shadow DOM content instead of an empty shadow root.
56
+ ([#4692](https://github.com/porsche-design-system/porsche-design-system/pull/4692))
57
+ - `Button`: `destructive` variant for actions with irreversible consequences, e.g. deleting data
58
+ ([#4693](https://github.com/porsche-design-system/porsche-design-system/pull/4693))
59
+ - `Button`, `Link`: `--p-button-bg`, `--p-button-fg`, `--p-link-bg` and `--p-link-fg` CSS variables to override the
60
+ background and foreground color in every state, including hover. You are responsible for ensuring sufficient contrast
61
+ and brand compliance. ([#4693](https://github.com/porsche-design-system/porsche-design-system/pull/4693))
62
+ - `Button`, `Link`: `--p-button-px`, `--p-button-py`, `--p-button-gap`, `--p-button-radius`, `--p-link-px`,
63
+ `--p-link-py`, `--p-link-gap` and `--p-link-radius` CSS variables to override horizontal padding, vertical padding,
64
+ the gap between label and icon as well as the border radius. You are responsible for ensuring a minimum target size of
65
+ 24px by 24px and brand compliance. ([#4693](https://github.com/porsche-design-system/porsche-design-system/pull/4693))
66
+ - `Icon`: `ai-chat` icon ([#4693](https://github.com/porsche-design-system/porsche-design-system/pull/4693))
67
+ - `Button`: (🧪Experimental) CSS custom state `loading` which can be targeted with the `:state()` pseudo-class, e.g.
68
+ `p-button:state(loading) { --p-button-bg: deeppink; }`. Browsers without support for `CustomStateSet` simply ignore
69
+ these rules. Be aware that custom states can't be expressed during server side rendering, they are only applied once
70
+ the component is hydrated on the client.
71
+ ([#4693](https://github.com/porsche-design-system/porsche-design-system/pull/4693))
72
+
73
+ ### Fixed
74
+
75
+ - `Carousel`: slides were dropped or left over when the amount of slides changed without also changing the amount of
76
+ pages, for example going from 1 to 2 slides at `slides-per-page="3"`. An added slide was never rendered and a removed
77
+ slide left an empty slot and a surplus pagination bullet behind.
78
+ ([#4686](https://github.com/porsche-design-system/porsche-design-system/pull/4686))
79
+ - `Carousel`: changing `slides-per-page` at runtime had no effect. Slide widths and the pagination kept the value the
80
+ carousel was initialised with. ([#4686](https://github.com/porsche-design-system/porsche-design-system/pull/4686))
81
+
17
82
  ## [4.6.0] - 2026-08-20
18
83
 
19
84
  ## [4.6.0-rc.3] - 2026-08-19
package/bin/pds-skill.js CHANGED
@@ -1,19 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- // Links locally installed Porsche Design System wrapper skills into the consumer project.
4
- // Every wrapper package exposes this same bin through the local node_modules/.bin directory;
5
- // --package selects which installed wrapper supplies the skills, independently of which
6
- // wrapper supplies the bin.
7
- //
8
- // --location is the destination parent directory for the skill links (e.g. `.claude/skills`,
9
- // `.agents`, `.github/skills`). Relative locations resolve from the cwd.
10
- //
11
- // --skill may be repeated to install only named skills. Omit it to install all discovered skills.
12
- //
13
- // pds-skill --package <package> --location <dir> [--skill <name>...]
14
- //
15
- // This is the canonical source copied into all four wrapper package distributions by their
16
- // `build:subPackages:skill:bin` steps.
3
+ // Canonical installer copied into every wrapper package. It creates portable relative links to
4
+ // locally installed skills; Windows junctions require absolute targets.
17
5
 
18
6
  const fs = require('node:fs');
19
7
  const path = require('node:path');
@@ -89,7 +77,6 @@ const readPackageManifest = (packageJsonPath) => {
89
77
  }
90
78
  };
91
79
 
92
- /** Parse the frontmatter `name:` value from SKILL.md content. Returns null if not found. */
93
80
  const parseFrontmatterName = (content) => {
94
81
  const fmMatch = content.match(/^---\n([\s\S]*?)\n---/);
95
82
  if (!fmMatch) {
@@ -99,10 +86,7 @@ const parseFrontmatterName = (content) => {
99
86
  return nameMatch ? nameMatch[1] : null;
100
87
  };
101
88
 
102
- /**
103
- * Validate that the SKILL.md at skillMdPath is a readable regular file with a frontmatter name
104
- * matching expectedName. Calls fail() on any violation.
105
- */
89
+ /** Fails unless a skill has a readable SKILL.md whose frontmatter name matches its directory. */
106
90
  const validateSkillMd = (skillMdPath, expectedName) => {
107
91
  let stats;
108
92
  try {
@@ -158,7 +142,7 @@ const preflightDestLink = (linkPath, show) => {
158
142
  }
159
143
  };
160
144
 
161
- /** Resolve the installed package directory by walking up from cwd. Fails if not found. */
145
+ /** Finds the nearest installed wrapper and its owning project root. */
162
146
  const resolvePackageDir = (packageName, cwd) => {
163
147
  if (!SUPPORTED_PACKAGES.includes(packageName)) {
164
148
  fail(`Unsupported package: ${packageName}\n${USAGE}`);
@@ -174,7 +158,7 @@ const resolvePackageDir = (packageName, cwd) => {
174
158
  if (installedName !== packageName) {
175
159
  fail(`Expected ${packageName} at ${packageDir}, but found ${installedName || 'a package without a name'}.`);
176
160
  }
177
- return packageDir;
161
+ return { packageDir, projectRoot: dir };
178
162
  }
179
163
 
180
164
  const parent = path.dirname(dir);
@@ -185,7 +169,6 @@ const resolvePackageDir = (packageName, cwd) => {
185
169
  }
186
170
  };
187
171
 
188
- /** Discover sorted child directory names under skillsDir. Returns empty array if the dir is absent. */
189
172
  const discoverSkillNames = (skillsDir) => {
190
173
  let entries;
191
174
  try {
@@ -205,6 +188,20 @@ const discoverSkillNames = (skillsDir) => {
205
188
  .sort();
206
189
  };
207
190
 
191
+ const isInside = (parentDir, target) => {
192
+ const rel = path.relative(parentDir, target);
193
+ return rel === '' || (rel !== '..' && !rel.startsWith(`..${path.sep}`) && !path.isAbsolute(rel));
194
+ };
195
+
196
+ /** Resolves symlinks when possible, otherwise preserves the input path. */
197
+ const resolveRealPath = (target) => {
198
+ try {
199
+ return fs.realpathSync(target);
200
+ } catch {
201
+ return target;
202
+ }
203
+ };
204
+
208
205
  const main = () => {
209
206
  const options = parseOptions(process.argv.slice(2));
210
207
  if (options.help) {
@@ -228,7 +225,7 @@ const main = () => {
228
225
  const destArg = options.location;
229
226
  const requestedSkills = options.skill ?? [];
230
227
 
231
- const packageDir = resolvePackageDir(packageName, cwd);
228
+ const { packageDir, projectRoot } = resolvePackageDir(packageName, cwd);
232
229
  const skillsDir = path.join(packageDir, 'skills');
233
230
  const discovered = discoverSkillNames(skillsDir);
234
231
 
@@ -236,7 +233,6 @@ const main = () => {
236
233
  fail(`The installed package does not ship any skills at ${skillsDir}. Upgrade the package and re-run.`);
237
234
  }
238
235
 
239
- // Validate --skill filters; unknown names fail clearly.
240
236
  if (requestedSkills.length > 0) {
241
237
  const unknown = requestedSkills.filter((s) => !discovered.includes(s));
242
238
  if (unknown.length > 0) {
@@ -247,7 +243,6 @@ const main = () => {
247
243
  }
248
244
  }
249
245
 
250
- // Deterministic sorted selection.
251
246
  const selected =
252
247
  requestedSkills.length > 0
253
248
  ? [...new Set(requestedSkills)].filter((s) => discovered.includes(s)).sort()
@@ -255,13 +250,12 @@ const main = () => {
255
250
 
256
251
  const destDir = path.isAbsolute(destArg) ? destArg : path.resolve(cwd, destArg);
257
252
 
258
- // Prefer a cwd-relative path in messages; fall back to absolute when outside.
253
+ // Prefer cwd-relative paths in messages.
259
254
  const show = (target) => {
260
255
  const rel = path.relative(cwd, target);
261
256
  return rel && !rel.startsWith('..') && !path.isAbsolute(rel) ? rel : target;
262
257
  };
263
258
 
264
- // Preflight every selected skill tree before touching the destination at all.
265
259
  for (const skillName of selected) {
266
260
  validateSkillMd(path.join(skillsDir, skillName, 'SKILL.md'), skillName);
267
261
  }
@@ -278,19 +272,30 @@ const main = () => {
278
272
  throw error;
279
273
  }
280
274
 
281
- // Preflight all destination links before any mutation.
282
275
  for (const skillName of selected) {
283
276
  preflightDestLink(path.join(destDir, skillName), show);
284
277
  }
285
278
 
286
- // All preflights passed perform link operations.
279
+ // Relative targets must be computed from the destination's resolved path.
280
+ const realDestDir = resolveRealPath(destDir);
281
+
282
+ // Windows junctions require absolute targets. Destinations outside the project do not gain
283
+ // portability from relative targets.
287
284
  const linkType = process.platform === 'win32' ? 'junction' : 'dir';
285
+ const useRelativeTarget = linkType !== 'junction' && isInside(projectRoot, realDestDir);
286
+
287
+ // Compare resolved targets so older absolute links remain idempotent.
288
+ const matchesDesiredTarget = (currentTarget, desiredTarget) =>
289
+ useRelativeTarget
290
+ ? path.normalize(currentTarget) === path.normalize(desiredTarget)
291
+ : path.resolve(realDestDir, currentTarget) === desiredTarget;
292
+
288
293
  for (const skillName of selected) {
289
294
  const skillDir = path.join(skillsDir, skillName);
290
295
  const linkPath = path.join(destDir, skillName);
296
+ const linkTarget = useRelativeTarget ? path.relative(realDestDir, skillDir) : skillDir;
291
297
 
292
- // Idempotent: repoint an existing symlink (including a dangling one), but never touch a
293
- // real directory a user may have hand-maintained — the preflight above already rejected that.
298
+ // Existing symlinks may be replaced; user-managed directories were rejected above.
294
299
  let existingLink = null;
295
300
  try {
296
301
  existingLink = fs.lstatSync(linkPath);
@@ -301,20 +306,24 @@ const main = () => {
301
306
  }
302
307
 
303
308
  if (existingLink?.isSymbolicLink()) {
309
+ let currentTarget = null;
304
310
  try {
305
- if (fs.realpathSync(linkPath) === fs.realpathSync(skillDir)) {
306
- console.log(`Porsche Design System skill already linked: ${show(linkPath)} -> ${skillDir}`);
307
- continue;
308
- }
311
+ currentTarget = fs.readlinkSync(linkPath);
309
312
  } catch (error) {
310
- if (error.code !== 'ENOENT') {
311
- if (isPermissionError(error)) {
312
- fail(`Cannot inspect ${show(linkPath)}: permission denied. Check the destination permissions and re-run.`);
313
- }
313
+ if (isPermissionError(error)) {
314
+ fail(`Cannot inspect ${show(linkPath)}: permission denied. Check the destination permissions and re-run.`);
315
+ }
316
+ // Windows reparse points can produce EINVAL despite lstat reporting a symlink.
317
+ if (error.code !== 'ENOENT' && error.code !== 'EINVAL') {
314
318
  throw error;
315
319
  }
316
- // Dangling symlink — fall through to replace it.
317
320
  }
321
+
322
+ if (currentTarget !== null && matchesDesiredTarget(currentTarget, linkTarget)) {
323
+ console.log(`Porsche Design System skill already linked: ${show(linkPath)} -> ${skillDir}`);
324
+ continue;
325
+ }
326
+
318
327
  try {
319
328
  fs.rmSync(linkPath, { force: true });
320
329
  } catch (error) {
@@ -326,7 +335,7 @@ const main = () => {
326
335
  }
327
336
 
328
337
  try {
329
- fs.symlinkSync(skillDir, linkPath, linkType);
338
+ fs.symlinkSync(linkTarget, linkPath, linkType);
330
339
  } catch (error) {
331
340
  if (process.platform === 'win32' && error.code === 'EPERM') {
332
341
  fail(