@porsche-design-system/components-angular 4.6.0-rc.0 → 4.6.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/ag-grid/package.json +6 -0
  3. package/bin/pds-skill.js +166 -79
  4. package/emotion/package.json +6 -0
  5. package/fesm2022/porsche-design-system-components-angular.mjs +232 -232
  6. package/jsdom-polyfill/package.json +5 -0
  7. package/meta/package.json +6 -0
  8. package/package.json +2 -2
  9. package/partials/package.json +6 -0
  10. package/{skill → skills/pds-knowledge-angular}/SKILL.md +5 -5
  11. package/skills/pds-knowledge-angular/references/components/p-accordion/accessibility.md +63 -0
  12. package/{skill → skills/pds-knowledge-angular}/references/components/p-accordion/p-accordion.md +4 -0
  13. package/skills/pds-knowledge-angular/references/components/p-banner/accessibility.md +35 -0
  14. package/{skill → skills/pds-knowledge-angular}/references/components/p-banner/p-banner.md +4 -0
  15. package/skills/pds-knowledge-angular/references/components/p-button/accessibility.md +61 -0
  16. package/{skill → skills/pds-knowledge-angular}/references/components/p-button/p-button.md +4 -0
  17. package/skills/pds-knowledge-angular/references/components/p-button-pure/accessibility.md +61 -0
  18. package/{skill → skills/pds-knowledge-angular}/references/components/p-button-pure/p-button-pure.md +4 -0
  19. package/skills/pds-knowledge-angular/references/components/p-button-tile/accessibility.md +31 -0
  20. package/{skill → skills/pds-knowledge-angular}/references/components/p-button-tile/p-button-tile.md +4 -0
  21. package/skills/pds-knowledge-angular/references/components/p-canvas/examples/Default.ts +105 -0
  22. package/{skill → skills/pds-knowledge-angular}/references/components/p-canvas/p-canvas.md +4 -0
  23. package/skills/pds-knowledge-angular/references/components/p-carousel/accessibility.md +61 -0
  24. package/{skill → skills/pds-knowledge-angular}/references/components/p-carousel/p-carousel.md +4 -0
  25. package/skills/pds-knowledge-angular/references/components/p-checkbox/accessibility.md +31 -0
  26. package/{skill → skills/pds-knowledge-angular}/references/components/p-checkbox/p-checkbox.md +4 -0
  27. package/skills/pds-knowledge-angular/references/components/p-crest/accessibility.md +17 -0
  28. package/{skill → skills/pds-knowledge-angular}/references/components/p-crest/p-crest.md +4 -0
  29. package/skills/pds-knowledge-angular/references/components/p-divider/accessibility.md +41 -0
  30. package/{skill → skills/pds-knowledge-angular}/references/components/p-divider/p-divider.md +4 -0
  31. package/skills/pds-knowledge-angular/references/components/p-drilldown/accessibility.md +65 -0
  32. package/{skill → skills/pds-knowledge-angular}/references/components/p-drilldown/p-drilldown.md +4 -0
  33. package/skills/pds-knowledge-angular/references/components/p-fieldset/accessibility.md +37 -0
  34. package/{skill → skills/pds-knowledge-angular}/references/components/p-fieldset/p-fieldset.md +4 -0
  35. package/skills/pds-knowledge-angular/references/components/p-flag/accessibility.md +39 -0
  36. package/{skill → skills/pds-knowledge-angular}/references/components/p-flag/p-flag.md +4 -0
  37. package/skills/pds-knowledge-angular/references/components/p-flyout/accessibility.md +80 -0
  38. package/{skill → skills/pds-knowledge-angular}/references/components/p-flyout/p-flyout.md +4 -0
  39. package/skills/pds-knowledge-angular/references/components/p-heading/accessibility.md +29 -0
  40. package/{skill → skills/pds-knowledge-angular}/references/components/p-heading/p-heading.md +4 -0
  41. package/skills/pds-knowledge-angular/references/components/p-icon/accessibility.md +39 -0
  42. package/{skill → skills/pds-knowledge-angular}/references/components/p-icon/p-icon.md +4 -0
  43. package/skills/pds-knowledge-angular/references/components/p-inline-notification/accessibility.md +38 -0
  44. package/{skill → skills/pds-knowledge-angular}/references/components/p-inline-notification/p-inline-notification.md +4 -0
  45. package/skills/pds-knowledge-angular/references/components/p-input-date/accessibility.md +45 -0
  46. package/{skill → skills/pds-knowledge-angular}/references/components/p-input-date/p-input-date.md +4 -0
  47. package/skills/pds-knowledge-angular/references/components/p-input-email/accessibility.md +45 -0
  48. package/{skill → skills/pds-knowledge-angular}/references/components/p-input-email/p-input-email.md +4 -0
  49. package/skills/pds-knowledge-angular/references/components/p-input-month/accessibility.md +45 -0
  50. package/{skill → skills/pds-knowledge-angular}/references/components/p-input-month/p-input-month.md +4 -0
  51. package/skills/pds-knowledge-angular/references/components/p-input-number/accessibility.md +45 -0
  52. package/{skill → skills/pds-knowledge-angular}/references/components/p-input-number/p-input-number.md +4 -0
  53. package/skills/pds-knowledge-angular/references/components/p-input-password/accessibility.md +45 -0
  54. package/{skill → skills/pds-knowledge-angular}/references/components/p-input-password/p-input-password.md +4 -0
  55. package/skills/pds-knowledge-angular/references/components/p-input-search/accessibility.md +59 -0
  56. package/{skill → skills/pds-knowledge-angular}/references/components/p-input-search/p-input-search.md +4 -0
  57. package/skills/pds-knowledge-angular/references/components/p-input-tel/accessibility.md +45 -0
  58. package/{skill → skills/pds-knowledge-angular}/references/components/p-input-tel/p-input-tel.md +4 -0
  59. package/skills/pds-knowledge-angular/references/components/p-input-text/accessibility.md +45 -0
  60. package/{skill → skills/pds-knowledge-angular}/references/components/p-input-text/p-input-text.md +4 -0
  61. package/skills/pds-knowledge-angular/references/components/p-input-time/accessibility.md +45 -0
  62. package/{skill → skills/pds-knowledge-angular}/references/components/p-input-time/p-input-time.md +4 -0
  63. package/skills/pds-knowledge-angular/references/components/p-input-url/accessibility.md +45 -0
  64. package/{skill → skills/pds-knowledge-angular}/references/components/p-input-url/p-input-url.md +4 -0
  65. package/skills/pds-knowledge-angular/references/components/p-input-week/accessibility.md +45 -0
  66. package/{skill → skills/pds-knowledge-angular}/references/components/p-input-week/p-input-week.md +4 -0
  67. package/skills/pds-knowledge-angular/references/components/p-link/accessibility.md +73 -0
  68. package/{skill → skills/pds-knowledge-angular}/references/components/p-link/p-link.md +4 -0
  69. package/skills/pds-knowledge-angular/references/components/p-link-pure/accessibility.md +73 -0
  70. package/{skill → skills/pds-knowledge-angular}/references/components/p-link-pure/p-link-pure.md +4 -0
  71. package/skills/pds-knowledge-angular/references/components/p-link-tile/accessibility.md +31 -0
  72. package/{skill → skills/pds-knowledge-angular}/references/components/p-link-tile/p-link-tile.md +4 -0
  73. package/skills/pds-knowledge-angular/references/components/p-modal/accessibility.md +80 -0
  74. package/{skill → skills/pds-knowledge-angular}/references/components/p-modal/p-modal.md +4 -0
  75. package/skills/pds-knowledge-angular/references/components/p-multi-select/accessibility.md +78 -0
  76. package/{skill → skills/pds-knowledge-angular}/references/components/p-multi-select/p-multi-select.md +4 -0
  77. package/skills/pds-knowledge-angular/references/components/p-pagination/accessibility.md +23 -0
  78. package/{skill → skills/pds-knowledge-angular}/references/components/p-pagination/p-pagination.md +4 -0
  79. package/skills/pds-knowledge-angular/references/components/p-pin-code/accessibility.md +45 -0
  80. package/{skill → skills/pds-knowledge-angular}/references/components/p-pin-code/p-pin-code.md +4 -0
  81. package/skills/pds-knowledge-angular/references/components/p-popover/accessibility.md +61 -0
  82. package/{skill → skills/pds-knowledge-angular}/references/components/p-popover/p-popover.md +4 -0
  83. package/skills/pds-knowledge-angular/references/components/p-radio-group/accessibility.md +63 -0
  84. package/{skill → skills/pds-knowledge-angular}/references/components/p-radio-group/p-radio-group.md +4 -0
  85. package/skills/pds-knowledge-angular/references/components/p-scroller/accessibility.md +31 -0
  86. package/{skill → skills/pds-knowledge-angular}/references/components/p-scroller/p-scroller.md +4 -0
  87. package/skills/pds-knowledge-angular/references/components/p-segmented-control/accessibility.md +67 -0
  88. package/{skill → skills/pds-knowledge-angular}/references/components/p-segmented-control/p-segmented-control.md +4 -0
  89. package/skills/pds-knowledge-angular/references/components/p-select/accessibility.md +140 -0
  90. package/{skill → skills/pds-knowledge-angular}/references/components/p-select/p-select.md +4 -0
  91. package/skills/pds-knowledge-angular/references/components/p-sheet/accessibility.md +80 -0
  92. package/{skill → skills/pds-knowledge-angular}/references/components/p-sheet/p-sheet.md +4 -0
  93. package/skills/pds-knowledge-angular/references/components/p-spinner/accessibility.md +33 -0
  94. package/{skill → skills/pds-knowledge-angular}/references/components/p-spinner/p-spinner.md +4 -0
  95. package/skills/pds-knowledge-angular/references/components/p-stepper-horizontal/accessibility.md +34 -0
  96. package/{skill → skills/pds-knowledge-angular}/references/components/p-stepper-horizontal/p-stepper-horizontal.md +4 -0
  97. package/skills/pds-knowledge-angular/references/components/p-switch/accessibility.md +35 -0
  98. package/{skill → skills/pds-knowledge-angular}/references/components/p-switch/p-switch.md +4 -0
  99. package/skills/pds-knowledge-angular/references/components/p-table/accessibility.md +47 -0
  100. package/{skill → skills/pds-knowledge-angular}/references/components/p-table/examples/Sorting.ts +11 -10
  101. package/{skill → skills/pds-knowledge-angular}/references/components/p-table/p-table.md +5 -1
  102. package/skills/pds-knowledge-angular/references/components/p-tabs/accessibility.md +56 -0
  103. package/{skill → skills/pds-knowledge-angular}/references/components/p-tabs/p-tabs.md +4 -0
  104. package/skills/pds-knowledge-angular/references/components/p-tabs-bar/accessibility.md +61 -0
  105. package/{skill → skills/pds-knowledge-angular}/references/components/p-tabs-bar/p-tabs-bar.md +4 -0
  106. package/skills/pds-knowledge-angular/references/components/p-tag/accessibility.md +19 -0
  107. package/{skill → skills/pds-knowledge-angular}/references/components/p-tag/p-tag.md +4 -0
  108. package/skills/pds-knowledge-angular/references/components/p-tag-dismissible/accessibility.md +35 -0
  109. package/{skill → skills/pds-knowledge-angular}/references/components/p-tag-dismissible/p-tag-dismissible.md +4 -0
  110. package/skills/pds-knowledge-angular/references/components/p-text/accessibility.md +21 -0
  111. package/{skill → skills/pds-knowledge-angular}/references/components/p-text/p-text.md +4 -0
  112. package/skills/pds-knowledge-angular/references/components/p-text-list/accessibility.md +31 -0
  113. package/{skill → skills/pds-knowledge-angular}/references/components/p-text-list/p-text-list.md +4 -0
  114. package/skills/pds-knowledge-angular/references/components/p-textarea/accessibility.md +45 -0
  115. package/{skill → skills/pds-knowledge-angular}/references/components/p-textarea/p-textarea.md +4 -0
  116. package/{skill → skills/pds-knowledge-angular}/references/components/p-toast/p-toast.md +1 -1
  117. package/skills/pds-knowledge-angular/references/components/p-wordmark/accessibility.md +31 -0
  118. package/{skill → skills/pds-knowledge-angular}/references/components/p-wordmark/p-wordmark.md +4 -0
  119. package/{skill → skills/pds-knowledge-angular}/references/styles/tailwindcss.md +1 -1
  120. package/testing/package.json +5 -0
  121. package/tokens/package.json +6 -0
  122. package/vanilla-extract/package.json +6 -0
  123. package/skill/references/components/p-canvas/examples/Default.ts +0 -13
  124. /package/{skill → skills/pds-knowledge-angular}/references/components/p-accordion/examples/Default.ts +0 -0
  125. /package/{skill → skills/pds-knowledge-angular}/references/components/p-accordion/examples/InteractiveElementsInSummary.ts +0 -0
  126. /package/{skill → skills/pds-knowledge-angular}/references/components/p-accordion/examples/StickySummary.ts +0 -0
  127. /package/{skill → skills/pds-knowledge-angular}/references/components/p-ai-tag/examples/Default.ts +0 -0
  128. /package/{skill → skills/pds-knowledge-angular}/references/components/p-ai-tag/examples/WithinCheckbox.ts +0 -0
  129. /package/{skill → skills/pds-knowledge-angular}/references/components/p-ai-tag/examples/WithinFormLabel.ts +0 -0
  130. /package/{skill → skills/pds-knowledge-angular}/references/components/p-ai-tag/examples/WithinImage.ts +0 -0
  131. /package/{skill → skills/pds-knowledge-angular}/references/components/p-ai-tag/examples/WithinInputSearch.ts +0 -0
  132. /package/{skill → skills/pds-knowledge-angular}/references/components/p-ai-tag/examples/WithinRadioGroup.ts +0 -0
  133. /package/{skill → skills/pds-knowledge-angular}/references/components/p-ai-tag/examples/WithinTable.ts +0 -0
  134. /package/{skill → skills/pds-knowledge-angular}/references/components/p-ai-tag/examples/WithinText.ts +0 -0
  135. /package/{skill → skills/pds-knowledge-angular}/references/components/p-ai-tag/p-ai-tag.md +0 -0
  136. /package/{skill → skills/pds-knowledge-angular}/references/components/p-banner/examples/Customization.ts +0 -0
  137. /package/{skill → skills/pds-knowledge-angular}/references/components/p-banner/examples/Default.ts +0 -0
  138. /package/{skill → skills/pds-knowledge-angular}/references/components/p-button/examples/Default.ts +0 -0
  139. /package/{skill → skills/pds-knowledge-angular}/references/components/p-button/examples/Form.ts +0 -0
  140. /package/{skill → skills/pds-knowledge-angular}/references/components/p-button/examples/FormAttribute.ts +0 -0
  141. /package/{skill → skills/pds-knowledge-angular}/references/components/p-button-pure/examples/CustomClickableArea.ts +0 -0
  142. /package/{skill → skills/pds-knowledge-angular}/references/components/p-button-pure/examples/Default.ts +0 -0
  143. /package/{skill → skills/pds-knowledge-angular}/references/components/p-button-pure/examples/Form.ts +0 -0
  144. /package/{skill → skills/pds-knowledge-angular}/references/components/p-button-pure/examples/FormAttribute.ts +0 -0
  145. /package/{skill → skills/pds-knowledge-angular}/references/components/p-button-tile/examples/ColorScheme.ts +0 -0
  146. /package/{skill → skills/pds-knowledge-angular}/references/components/p-button-tile/examples/Default.ts +0 -0
  147. /package/{skill → skills/pds-knowledge-angular}/references/components/p-button-tile/examples/FooterSlot.ts +0 -0
  148. /package/{skill → skills/pds-knowledge-angular}/references/components/p-button-tile/examples/Hyphens.ts +0 -0
  149. /package/{skill → skills/pds-knowledge-angular}/references/components/p-button-tile/examples/UiBehaviour.ts +0 -0
  150. /package/{skill → skills/pds-knowledge-angular}/references/components/p-carousel/examples/Default.ts +0 -0
  151. /package/{skill → skills/pds-knowledge-angular}/references/components/p-carousel/examples/DynamicSlides.ts +0 -0
  152. /package/{skill → skills/pds-knowledge-angular}/references/components/p-carousel/examples/FlexibleWidths.ts +0 -0
  153. /package/{skill → skills/pds-knowledge-angular}/references/components/p-carousel/examples/FocusOnCenterSlide.ts +0 -0
  154. /package/{skill → skills/pds-knowledge-angular}/references/components/p-carousel/examples/Intl.ts +0 -0
  155. /package/{skill → skills/pds-knowledge-angular}/references/components/p-carousel/examples/JumpToSlide.ts +0 -0
  156. /package/{skill → skills/pds-knowledge-angular}/references/components/p-checkbox/examples/Default.ts +0 -0
  157. /package/{skill → skills/pds-knowledge-angular}/references/components/p-checkbox/examples/Form.ts +0 -0
  158. /package/{skill → skills/pds-knowledge-angular}/references/components/p-checkbox/examples/Indeterminate.ts +0 -0
  159. /package/{skill → skills/pds-knowledge-angular}/references/components/p-checkbox/examples/Slots.ts +0 -0
  160. /package/{skill → skills/pds-knowledge-angular}/references/components/p-checkbox/examples/WrappedLabel.ts +0 -0
  161. /package/{skill → skills/pds-knowledge-angular}/references/components/p-crest/examples/CustomClickableArea.ts +0 -0
  162. /package/{skill → skills/pds-knowledge-angular}/references/components/p-crest/examples/Default.ts +0 -0
  163. /package/{skill → skills/pds-knowledge-angular}/references/components/p-crest/examples/Link.ts +0 -0
  164. /package/{skill → skills/pds-knowledge-angular}/references/components/p-display/examples/Color.ts +0 -0
  165. /package/{skill → skills/pds-knowledge-angular}/references/components/p-display/examples/Default.ts +0 -0
  166. /package/{skill → skills/pds-knowledge-angular}/references/components/p-display/examples/Semantics.ts +0 -0
  167. /package/{skill → skills/pds-knowledge-angular}/references/components/p-display/examples/Size.ts +0 -0
  168. /package/{skill → skills/pds-knowledge-angular}/references/components/p-display/examples/SizeResponsive.ts +0 -0
  169. /package/{skill → skills/pds-knowledge-angular}/references/components/p-display/p-display.md +0 -0
  170. /package/{skill → skills/pds-knowledge-angular}/references/components/p-divider/examples/Default.ts +0 -0
  171. /package/{skill → skills/pds-knowledge-angular}/references/components/p-divider/examples/Responsive.ts +0 -0
  172. /package/{skill → skills/pds-knowledge-angular}/references/components/p-divider/examples/Vertical.ts +0 -0
  173. /package/{skill → skills/pds-knowledge-angular}/references/components/p-drilldown/examples/CustomContent.ts +0 -0
  174. /package/{skill → skills/pds-knowledge-angular}/references/components/p-drilldown/examples/Default.ts +0 -0
  175. /package/{skill → skills/pds-knowledge-angular}/references/components/p-fieldset/examples/Default.ts +0 -0
  176. /package/{skill → skills/pds-knowledge-angular}/references/components/p-fieldset/examples/Required.ts +0 -0
  177. /package/{skill → skills/pds-knowledge-angular}/references/components/p-fieldset/examples/SlottedLabel.ts +0 -0
  178. /package/{skill → skills/pds-knowledge-angular}/references/components/p-fieldset/examples/SlottedMessage.ts +0 -0
  179. /package/{skill → skills/pds-knowledge-angular}/references/components/p-flag/examples/Default.ts +0 -0
  180. /package/{skill → skills/pds-knowledge-angular}/references/components/p-flag/examples/ResponsiveSize.ts +0 -0
  181. /package/{skill → skills/pds-knowledge-angular}/references/components/p-flag/examples/Size.ts +0 -0
  182. /package/{skill → skills/pds-knowledge-angular}/references/components/p-flag/examples/SizeCssVar.ts +0 -0
  183. /package/{skill → skills/pds-knowledge-angular}/references/components/p-flyout/examples/CustomStyling.ts +0 -0
  184. /package/{skill → skills/pds-knowledge-angular}/references/components/p-flyout/examples/Default.ts +0 -0
  185. /package/{skill → skills/pds-knowledge-angular}/references/components/p-flyout/examples/Form.ts +0 -0
  186. /package/{skill → skills/pds-knowledge-angular}/references/components/p-flyout/examples/StickyTop.ts +0 -0
  187. /package/{skill → skills/pds-knowledge-angular}/references/components/p-heading/examples/Color.ts +0 -0
  188. /package/{skill → skills/pds-knowledge-angular}/references/components/p-heading/examples/Default.ts +0 -0
  189. /package/{skill → skills/pds-knowledge-angular}/references/components/p-heading/examples/Semantics.ts +0 -0
  190. /package/{skill → skills/pds-knowledge-angular}/references/components/p-icon/examples/Color.ts +0 -0
  191. /package/{skill → skills/pds-knowledge-angular}/references/components/p-icon/examples/ColorCssVar.ts +0 -0
  192. /package/{skill → skills/pds-knowledge-angular}/references/components/p-icon/examples/Custom.ts +0 -0
  193. /package/{skill → skills/pds-knowledge-angular}/references/components/p-icon/examples/Default.ts +0 -0
  194. /package/{skill → skills/pds-knowledge-angular}/references/components/p-icon/examples/Overview.ts +0 -0
  195. /package/{skill → skills/pds-knowledge-angular}/references/components/p-icon/examples/ResponsiveSize.ts +0 -0
  196. /package/{skill → skills/pds-knowledge-angular}/references/components/p-icon/examples/Size.ts +0 -0
  197. /package/{skill → skills/pds-knowledge-angular}/references/components/p-icon/examples/SizeCssVar.ts +0 -0
  198. /package/{skill → skills/pds-knowledge-angular}/references/components/p-inline-notification/examples/ActionButton.ts +0 -0
  199. /package/{skill → skills/pds-knowledge-angular}/references/components/p-inline-notification/examples/Default.ts +0 -0
  200. /package/{skill → skills/pds-knowledge-angular}/references/components/p-inline-notification/examples/EventHandling.ts +0 -0
  201. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-date/examples/Default.ts +0 -0
  202. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-date/examples/Form.ts +0 -0
  203. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-date/examples/Slots.ts +0 -0
  204. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-email/examples/Default.ts +0 -0
  205. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-email/examples/Form.ts +0 -0
  206. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-email/examples/Slots.ts +0 -0
  207. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-month/examples/Default.ts +0 -0
  208. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-month/examples/Form.ts +0 -0
  209. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-month/examples/Slots.ts +0 -0
  210. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-number/examples/Default.ts +0 -0
  211. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-number/examples/Form.ts +0 -0
  212. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-number/examples/Slots.ts +0 -0
  213. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-password/examples/Default.ts +0 -0
  214. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-password/examples/Form.ts +0 -0
  215. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-password/examples/Slots.ts +0 -0
  216. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-password/examples/Toggle.ts +0 -0
  217. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-search/examples/AriaCombobox.ts +0 -0
  218. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-search/examples/Default.ts +0 -0
  219. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-search/examples/Form.ts +0 -0
  220. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-search/examples/Slots.ts +0 -0
  221. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-tel/examples/Default.ts +0 -0
  222. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-tel/examples/Form.ts +0 -0
  223. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-tel/examples/Slots.ts +0 -0
  224. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-text/examples/Controlled.ts +0 -0
  225. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-text/examples/Default.ts +0 -0
  226. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-text/examples/Form.ts +0 -0
  227. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-text/examples/Slots.ts +0 -0
  228. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-time/examples/Default.ts +0 -0
  229. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-time/examples/Form.ts +0 -0
  230. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-time/examples/Slots.ts +0 -0
  231. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-url/examples/Default.ts +0 -0
  232. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-url/examples/Form.ts +0 -0
  233. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-url/examples/Slots.ts +0 -0
  234. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-week/examples/Default.ts +0 -0
  235. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-week/examples/Form.ts +0 -0
  236. /package/{skill → skills/pds-knowledge-angular}/references/components/p-input-week/examples/Slots.ts +0 -0
  237. /package/{skill → skills/pds-knowledge-angular}/references/components/p-link/examples/Default.ts +0 -0
  238. /package/{skill → skills/pds-knowledge-angular}/references/components/p-link/examples/FrameworkRouting.ts +0 -0
  239. /package/{skill → skills/pds-knowledge-angular}/references/components/p-link/examples/Icon.ts +0 -0
  240. /package/{skill → skills/pds-knowledge-angular}/references/components/p-link-pure/examples/CustomClickableArea.ts +0 -0
  241. /package/{skill → skills/pds-knowledge-angular}/references/components/p-link-pure/examples/Default.ts +0 -0
  242. /package/{skill → skills/pds-knowledge-angular}/references/components/p-link-pure/examples/FrameworkRouting.ts +0 -0
  243. /package/{skill → skills/pds-knowledge-angular}/references/components/p-link-pure/examples/Icon.ts +0 -0
  244. /package/{skill → skills/pds-knowledge-angular}/references/components/p-link-tile/examples/ColorScheme.ts +0 -0
  245. /package/{skill → skills/pds-knowledge-angular}/references/components/p-link-tile/examples/Default.ts +0 -0
  246. /package/{skill → skills/pds-knowledge-angular}/references/components/p-link-tile/examples/FooterSlot.ts +0 -0
  247. /package/{skill → skills/pds-knowledge-angular}/references/components/p-link-tile/examples/Hyphens.ts +0 -0
  248. /package/{skill → skills/pds-knowledge-angular}/references/components/p-link-tile/examples/UiBehaviour.ts +0 -0
  249. /package/{skill → skills/pds-knowledge-angular}/references/components/p-link-tile/examples/WithVideo.ts +0 -0
  250. /package/{skill → skills/pds-knowledge-angular}/references/components/p-link-tile-product/examples/Default.ts +0 -0
  251. /package/{skill → skills/pds-knowledge-angular}/references/components/p-link-tile-product/examples/FrameworkRouting.ts +0 -0
  252. /package/{skill → skills/pds-knowledge-angular}/references/components/p-link-tile-product/p-link-tile-product.md +0 -0
  253. /package/{skill → skills/pds-knowledge-angular}/references/components/p-modal/examples/AlertDialog.ts +0 -0
  254. /package/{skill → skills/pds-knowledge-angular}/references/components/p-modal/examples/CustomStyling.ts +0 -0
  255. /package/{skill → skills/pds-knowledge-angular}/references/components/p-modal/examples/Default.ts +0 -0
  256. /package/{skill → skills/pds-knowledge-angular}/references/components/p-modal/examples/Scrollable.ts +0 -0
  257. /package/{skill → skills/pds-knowledge-angular}/references/components/p-model-signature/examples/CustomStyling.ts +0 -0
  258. /package/{skill → skills/pds-knowledge-angular}/references/components/p-model-signature/examples/Default.ts +0 -0
  259. /package/{skill → skills/pds-knowledge-angular}/references/components/p-model-signature/examples/MaskBlendMode.ts +0 -0
  260. /package/{skill → skills/pds-knowledge-angular}/references/components/p-model-signature/examples/MaskImage.ts +0 -0
  261. /package/{skill → skills/pds-knowledge-angular}/references/components/p-model-signature/examples/MaskVideo.ts +0 -0
  262. /package/{skill → skills/pds-knowledge-angular}/references/components/p-model-signature/examples/SafeZone.ts +0 -0
  263. /package/{skill → skills/pds-knowledge-angular}/references/components/p-model-signature/p-model-signature.md +0 -0
  264. /package/{skill → skills/pds-knowledge-angular}/references/components/p-multi-select/examples/AsyncFilter.ts +0 -0
  265. /package/{skill → skills/pds-knowledge-angular}/references/components/p-multi-select/examples/Default.ts +0 -0
  266. /package/{skill → skills/pds-knowledge-angular}/references/components/p-multi-select/examples/Form.ts +0 -0
  267. /package/{skill → skills/pds-knowledge-angular}/references/components/p-multi-select/examples/Optgroups.ts +0 -0
  268. /package/{skill → skills/pds-knowledge-angular}/references/components/p-multi-select/examples/SelectedSlot.ts +0 -0
  269. /package/{skill → skills/pds-knowledge-angular}/references/components/p-multi-select/examples/SetValue.ts +0 -0
  270. /package/{skill → skills/pds-knowledge-angular}/references/components/p-multi-select/examples/Slots.ts +0 -0
  271. /package/{skill → skills/pds-knowledge-angular}/references/components/p-pagination/examples/Default.ts +0 -0
  272. /package/{skill → skills/pds-knowledge-angular}/references/components/p-pin-code/examples/CopyPaste.ts +0 -0
  273. /package/{skill → skills/pds-knowledge-angular}/references/components/p-pin-code/examples/Default.ts +0 -0
  274. /package/{skill → skills/pds-knowledge-angular}/references/components/p-pin-code/examples/Form.ts +0 -0
  275. /package/{skill → skills/pds-knowledge-angular}/references/components/p-pin-code/examples/Slots.ts +0 -0
  276. /package/{skill → skills/pds-knowledge-angular}/references/components/p-popover/examples/Default.ts +0 -0
  277. /package/{skill → skills/pds-knowledge-angular}/references/components/p-popover/examples/SlottedButton.ts +0 -0
  278. /package/{skill → skills/pds-knowledge-angular}/references/components/p-radio-group/examples/Default.ts +0 -0
  279. /package/{skill → skills/pds-knowledge-angular}/references/components/p-radio-group/examples/Form.ts +0 -0
  280. /package/{skill → skills/pds-knowledge-angular}/references/components/p-radio-group/examples/Slots.ts +0 -0
  281. /package/{skill → skills/pds-knowledge-angular}/references/components/p-scroller/examples/Default.ts +0 -0
  282. /package/{skill → skills/pds-knowledge-angular}/references/components/p-scroller/examples/Height.ts +0 -0
  283. /package/{skill → skills/pds-knowledge-angular}/references/components/p-scroller/examples/ScrollToPosition.ts +0 -0
  284. /package/{skill → skills/pds-knowledge-angular}/references/components/p-segmented-control/examples/Default.ts +0 -0
  285. /package/{skill → skills/pds-knowledge-angular}/references/components/p-segmented-control/examples/Form.ts +0 -0
  286. /package/{skill → skills/pds-knowledge-angular}/references/components/p-segmented-control/examples/Slots.ts +0 -0
  287. /package/{skill → skills/pds-knowledge-angular}/references/components/p-segmented-control/examples/WithLabels.ts +0 -0
  288. /package/{skill → skills/pds-knowledge-angular}/references/components/p-select/examples/AsyncFilter.ts +0 -0
  289. /package/{skill → skills/pds-knowledge-angular}/references/components/p-select/examples/Default.ts +0 -0
  290. /package/{skill → skills/pds-knowledge-angular}/references/components/p-select/examples/Form.ts +0 -0
  291. /package/{skill → skills/pds-knowledge-angular}/references/components/p-select/examples/Optgroups.ts +0 -0
  292. /package/{skill → skills/pds-knowledge-angular}/references/components/p-select/examples/Required.ts +0 -0
  293. /package/{skill → skills/pds-knowledge-angular}/references/components/p-select/examples/SelectedSlot.ts +0 -0
  294. /package/{skill → skills/pds-knowledge-angular}/references/components/p-select/examples/SetValue.ts +0 -0
  295. /package/{skill → skills/pds-knowledge-angular}/references/components/p-select/examples/Slots.ts +0 -0
  296. /package/{skill → skills/pds-knowledge-angular}/references/components/p-select/examples/SlottedImages.ts +0 -0
  297. /package/{skill → skills/pds-knowledge-angular}/references/components/p-sheet/examples/Default.ts +0 -0
  298. /package/{skill → skills/pds-knowledge-angular}/references/components/p-spinner/examples/Color.ts +0 -0
  299. /package/{skill → skills/pds-knowledge-angular}/references/components/p-spinner/examples/ColorCssVar.ts +0 -0
  300. /package/{skill → skills/pds-knowledge-angular}/references/components/p-spinner/examples/Default.ts +0 -0
  301. /package/{skill → skills/pds-knowledge-angular}/references/components/p-spinner/examples/ResponsiveSize.ts +0 -0
  302. /package/{skill → skills/pds-knowledge-angular}/references/components/p-spinner/examples/Size.ts +0 -0
  303. /package/{skill → skills/pds-knowledge-angular}/references/components/p-spinner/examples/SizeCssVar.ts +0 -0
  304. /package/{skill → skills/pds-knowledge-angular}/references/components/p-stepper-horizontal/examples/Default.ts +0 -0
  305. /package/{skill → skills/pds-knowledge-angular}/references/components/p-stepper-horizontal/examples/FrameworkImplementation.ts +0 -0
  306. /package/{skill → skills/pds-knowledge-angular}/references/components/p-switch/examples/Default.ts +0 -0
  307. /package/{skill → skills/pds-knowledge-angular}/references/components/p-table/examples/Advanced.ts +0 -0
  308. /package/{skill → skills/pds-knowledge-angular}/references/components/p-table/examples/CaptionProperty.ts +0 -0
  309. /package/{skill → skills/pds-knowledge-angular}/references/components/p-table/examples/CaptionSlot.ts +0 -0
  310. /package/{skill → skills/pds-knowledge-angular}/references/components/p-table/examples/Default.ts +0 -0
  311. /package/{skill → skills/pds-knowledge-angular}/references/components/p-table/examples/HideLabel.ts +0 -0
  312. /package/{skill → skills/pds-knowledge-angular}/references/components/p-table/examples/LayoutFixed.ts +0 -0
  313. /package/{skill → skills/pds-knowledge-angular}/references/components/p-tabs/examples/ActiveTab.ts +0 -0
  314. /package/{skill → skills/pds-knowledge-angular}/references/components/p-tabs/examples/Default.ts +0 -0
  315. /package/{skill → skills/pds-knowledge-angular}/references/components/p-tabs/examples/Gradient.ts +0 -0
  316. /package/{skill → skills/pds-knowledge-angular}/references/components/p-tabs/examples/Labelling.ts +0 -0
  317. /package/{skill → skills/pds-knowledge-angular}/references/components/p-tabs-bar/examples/Default.ts +0 -0
  318. /package/{skill → skills/pds-knowledge-angular}/references/components/p-tabs-bar/examples/Gradient.ts +0 -0
  319. /package/{skill → skills/pds-knowledge-angular}/references/components/p-tabs-bar/examples/Labelling.ts +0 -0
  320. /package/{skill → skills/pds-knowledge-angular}/references/components/p-tabs-bar/examples/Links.ts +0 -0
  321. /package/{skill → skills/pds-knowledge-angular}/references/components/p-tag/examples/Default.ts +0 -0
  322. /package/{skill → skills/pds-knowledge-angular}/references/components/p-tag/examples/Multiline.ts +0 -0
  323. /package/{skill → skills/pds-knowledge-angular}/references/components/p-tag/examples/SlottedButton.ts +0 -0
  324. /package/{skill → skills/pds-knowledge-angular}/references/components/p-tag/examples/SlottedLink.ts +0 -0
  325. /package/{skill → skills/pds-knowledge-angular}/references/components/p-tag-dismissible/examples/Default.ts +0 -0
  326. /package/{skill → skills/pds-knowledge-angular}/references/components/p-text/examples/Default.ts +0 -0
  327. /package/{skill → skills/pds-knowledge-angular}/references/components/p-text/examples/Semantics.ts +0 -0
  328. /package/{skill → skills/pds-knowledge-angular}/references/components/p-text/examples/Size.ts +0 -0
  329. /package/{skill → skills/pds-knowledge-angular}/references/components/p-text/examples/SizeResponsive.ts +0 -0
  330. /package/{skill → skills/pds-knowledge-angular}/references/components/p-text-list/examples/Default.ts +0 -0
  331. /package/{skill → skills/pds-knowledge-angular}/references/components/p-textarea/examples/Default.ts +0 -0
  332. /package/{skill → skills/pds-knowledge-angular}/references/components/p-textarea/examples/Form.ts +0 -0
  333. /package/{skill → skills/pds-knowledge-angular}/references/components/p-textarea/examples/Slots.ts +0 -0
  334. /package/{skill → skills/pds-knowledge-angular}/references/components/p-toast/examples/Default.ts +0 -0
  335. /package/{skill → skills/pds-knowledge-angular}/references/components/p-wordmark/examples/CustomClickableArea.ts +0 -0
  336. /package/{skill → skills/pds-knowledge-angular}/references/components/p-wordmark/examples/Default.ts +0 -0
  337. /package/{skill → skills/pds-knowledge-angular}/references/components/p-wordmark/examples/Size.ts +0 -0
  338. /package/{skill → skills/pds-knowledge-angular}/references/icons.md +0 -0
  339. /package/{skill → skills/pds-knowledge-angular}/references/styles/emotion.md +0 -0
  340. /package/{skill → skills/pds-knowledge-angular}/references/styles/scss.md +0 -0
  341. /package/{skill → skills/pds-knowledge-angular}/references/styles/vanilla-extract.md +0 -0
  342. /package/{skill → skills/pds-knowledge-angular}/references/stylesheets.md +0 -0
  343. /package/{skill → skills/pds-knowledge-angular}/references/tokens.md +0 -0
package/CHANGELOG.md CHANGED
@@ -14,6 +14,30 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0),
14
14
 
15
15
  ## [Unreleased]
16
16
 
17
+ ## [4.6.0-rc.1] - 2026-08-03
18
+
19
+ ### Added
20
+
21
+ - `Knowledge Skill`: Accessibility integration examples for each documented component, pairing anti-pattern and
22
+ recommended markup in the selected framework
23
+ ([#4613](https://github.com/porsche-design-system/porsche-design-system/pull/4613))
24
+ - `pds-skill`: `--skill` option to link only the named skills instead of all discovered ones
25
+ ([#4613](https://github.com/porsche-design-system/porsche-design-system/pull/4613))
26
+
27
+ ### Changed
28
+
29
+ - `Knowledge Skill`: Renamed from `porsche-design-system-components-{js|angular|react|vue}` to
30
+ `pds-knowledge-{js|angular|react|vue}`
31
+ ([#4613](https://github.com/porsche-design-system/porsche-design-system/pull/4613))
32
+ - `Knowledge Skill`: Now shipped in the package's `skills/` directory with one directory per skill, replacing the single
33
+ `skill/` directory. Update any manually created symlink to the new location
34
+ ([#4613](https://github.com/porsche-design-system/porsche-design-system/pull/4613))
35
+
36
+ ### Fixed
37
+
38
+ - `Segmented Control`: Improved `hover/selected` color visibility of items
39
+ ([#4610](https://github.com/porsche-design-system/porsche-design-system/pull/4610))
40
+
17
41
  ## [4.6.0-rc.0] - 2026-07-21
18
42
 
19
43
  ### Added
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "cjs/index.cjs",
3
+ "module": "esm/index.mjs",
4
+ "types": "esm/index.d.ts",
5
+ "sideEffects": false
6
+ }
package/bin/pds-skill.js CHANGED
@@ -1,13 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- // Links a locally installed Porsche Design System wrapper skill into the consumer project. Every
4
- // wrapper exposes this same bin through the local node_modules/.bin directory; --package selects
5
- // which installed wrapper supplies the skill, independently of which wrapper supplies the bin.
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.
6
7
  //
7
- // --location is the destination parent directory for the link (e.g. `.claude/skills`, `.agents`,
8
- // `.github/skills`). Relative locations resolve from the cwd.
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.
9
10
  //
10
- // pds-skill --package <package> --location <dir>
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>...]
11
14
  //
12
15
  // This is the canonical source copied into all four wrapper package distributions by their
13
16
  // `build:subPackages:skill:bin` steps.
@@ -23,13 +26,14 @@ const SUPPORTED_PACKAGES = [
23
26
  '@porsche-design-system/components-vue',
24
27
  ];
25
28
  const USAGE = [
26
- 'Usage: pds-skill --package <package> --location <dir>',
29
+ 'Usage: pds-skill --package <package> --location <dir> [--skill <name>...]',
27
30
  '',
28
31
  'Required options:',
29
32
  ' -p, --package <package> locally installed Porsche Design System wrapper',
30
- ' -l, --location <dir> destination parent directory for the skill link',
33
+ ' -l, --location <dir> destination parent directory for the skill links',
31
34
  '',
32
35
  'Options:',
36
+ ' -s, --skill <name> install only the named skill (repeatable); omit to install all',
33
37
  ' -h, --help print this usage',
34
38
  '',
35
39
  `Supported packages: ${SUPPORTED_PACKAGES.join(', ')}`,
@@ -50,6 +54,7 @@ const parseOptions = (args) => {
50
54
  options: {
51
55
  package: { type: 'string', short: 'p' },
52
56
  location: { type: 'string', short: 'l' },
57
+ skill: { type: 'string', short: 's', multiple: true },
53
58
  help: { type: 'boolean', short: 'h' },
54
59
  },
55
60
  strict: true,
@@ -60,8 +65,6 @@ const parseOptions = (args) => {
60
65
  }
61
66
  };
62
67
 
63
- const linkNameFromPackage = (packageName) => packageName.slice(1).replace('/', '-');
64
-
65
68
  const readPackageManifest = (packageJsonPath) => {
66
69
  let content;
67
70
  try {
@@ -86,7 +89,21 @@ const readPackageManifest = (packageJsonPath) => {
86
89
  }
87
90
  };
88
91
 
89
- const validateSkillEntry = (skillMdPath) => {
92
+ /** Parse the frontmatter `name:` value from SKILL.md content. Returns null if not found. */
93
+ const parseFrontmatterName = (content) => {
94
+ const fmMatch = content.match(/^---\n([\s\S]*?)\n---/);
95
+ if (!fmMatch) {
96
+ return null;
97
+ }
98
+ const nameMatch = fmMatch[1].match(/^name:\s*(\S+)/m);
99
+ return nameMatch ? nameMatch[1] : null;
100
+ };
101
+
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
+ */
106
+ const validateSkillMd = (skillMdPath, expectedName) => {
90
107
  let stats;
91
108
  try {
92
109
  stats = fs.statSync(skillMdPath);
@@ -104,18 +121,45 @@ const validateSkillEntry = (skillMdPath) => {
104
121
  fail(`${skillMdPath} is not a file. Reinstall the package and re-run.`);
105
122
  }
106
123
 
124
+ let content;
107
125
  try {
108
- const descriptor = fs.openSync(skillMdPath, 'r');
109
- fs.closeSync(descriptor);
126
+ content = fs.readFileSync(skillMdPath, 'utf8');
110
127
  } catch (error) {
111
128
  if (isPermissionError(error)) {
112
129
  fail(`Cannot read ${skillMdPath}: permission denied. Check the package permissions and re-run.`);
113
130
  }
114
131
  throw error;
115
132
  }
133
+
134
+ const name = parseFrontmatterName(content);
135
+ if (name !== expectedName) {
136
+ fail(
137
+ `${skillMdPath} has frontmatter name "${name ?? '(none)'}" but its directory is "${expectedName}". Reinstall the package and re-run.`
138
+ );
139
+ }
140
+ };
141
+
142
+ /** Preflight the destination link path. Fails if something other than a symlink (or nothing) exists there. */
143
+ const preflightDestLink = (linkPath, show) => {
144
+ let existing;
145
+ try {
146
+ existing = fs.lstatSync(linkPath);
147
+ } catch (error) {
148
+ if (error.code === 'ENOENT') {
149
+ return;
150
+ }
151
+ if (isPermissionError(error)) {
152
+ fail(`Cannot inspect ${show(linkPath)}: permission denied. Check the destination permissions and re-run.`);
153
+ }
154
+ throw error;
155
+ }
156
+ if (!existing.isSymbolicLink()) {
157
+ fail(`Refusing to replace ${show(linkPath)}: it exists and is not a symlink. Remove it manually and re-run.`);
158
+ }
116
159
  };
117
160
 
118
- const skillDirFromPackage = (packageName, cwd) => {
161
+ /** Resolve the installed package directory by walking up from cwd. Fails if not found. */
162
+ const resolvePackageDir = (packageName, cwd) => {
119
163
  if (!SUPPORTED_PACKAGES.includes(packageName)) {
120
164
  fail(`Unsupported package: ${packageName}\n${USAGE}`);
121
165
  }
@@ -130,9 +174,7 @@ const skillDirFromPackage = (packageName, cwd) => {
130
174
  if (installedName !== packageName) {
131
175
  fail(`Expected ${packageName} at ${packageDir}, but found ${installedName || 'a package without a name'}.`);
132
176
  }
133
- const skillDir = path.join(packageDir, 'skill');
134
- validateSkillEntry(path.join(skillDir, 'SKILL.md'));
135
- return skillDir;
177
+ return packageDir;
136
178
  }
137
179
 
138
180
  const parent = path.dirname(dir);
@@ -143,20 +185,36 @@ const skillDirFromPackage = (packageName, cwd) => {
143
185
  }
144
186
  };
145
187
 
188
+ /** Discover sorted child directory names under skillsDir. Returns empty array if the dir is absent. */
189
+ const discoverSkillNames = (skillsDir) => {
190
+ let entries;
191
+ try {
192
+ entries = fs.readdirSync(skillsDir, { withFileTypes: true });
193
+ } catch (error) {
194
+ if (isMissingPathError(error)) {
195
+ return [];
196
+ }
197
+ if (isPermissionError(error)) {
198
+ fail(`Cannot read ${skillsDir}: permission denied. Check the package permissions and re-run.`);
199
+ }
200
+ throw error;
201
+ }
202
+ return entries
203
+ .filter((e) => e.isDirectory())
204
+ .map((e) => e.name)
205
+ .sort();
206
+ };
207
+
146
208
  const main = () => {
147
209
  const options = parseOptions(process.argv.slice(2));
148
210
  if (options.help) {
149
211
  console.log(USAGE);
150
212
  return;
151
213
  }
152
- const missingOptions = [
153
- !options.package && '--package',
154
- !options.location && '--location',
155
- ].filter(Boolean);
214
+
215
+ const missingOptions = [!options.package && '--package', !options.location && '--location'].filter(Boolean);
156
216
  if (missingOptions.length > 0) {
157
- fail(
158
- `Missing required option${missingOptions.length > 1 ? 's' : ''}: ${missingOptions.join(' and ')}\n${USAGE}`
159
- );
217
+ fail(`Missing required option${missingOptions.length > 1 ? 's' : ''}: ${missingOptions.join(' and ')}\n${USAGE}`);
160
218
  }
161
219
 
162
220
  if (process.versions.pnp) {
@@ -168,92 +226,121 @@ const main = () => {
168
226
  const cwd = process.cwd();
169
227
  const packageName = options.package;
170
228
  const destArg = options.location;
171
- const skillDir = skillDirFromPackage(packageName, cwd);
172
- const linkName = linkNameFromPackage(packageName);
229
+ const requestedSkills = options.skill ?? [];
230
+
231
+ const packageDir = resolvePackageDir(packageName, cwd);
232
+ const skillsDir = path.join(packageDir, 'skills');
233
+ const discovered = discoverSkillNames(skillsDir);
234
+
235
+ if (discovered.length === 0) {
236
+ fail(`The installed package does not ship any skills at ${skillsDir}. Upgrade the package and re-run.`);
237
+ }
238
+
239
+ // Validate --skill filters; unknown names fail clearly.
240
+ if (requestedSkills.length > 0) {
241
+ const unknown = requestedSkills.filter((s) => !discovered.includes(s));
242
+ if (unknown.length > 0) {
243
+ fail(
244
+ `Unknown skill${unknown.length > 1 ? 's' : ''}: ${unknown.join(', ')}. ` +
245
+ `Available: ${[...discovered].sort().join(', ')}.`
246
+ );
247
+ }
248
+ }
249
+
250
+ // Deterministic sorted selection.
251
+ const selected =
252
+ requestedSkills.length > 0
253
+ ? [...new Set(requestedSkills)].filter((s) => discovered.includes(s)).sort()
254
+ : discovered;
173
255
 
174
- const skillsDir = path.isAbsolute(destArg) ? destArg : path.resolve(cwd, destArg);
175
- const linkPath = path.join(skillsDir, linkName);
256
+ const destDir = path.isAbsolute(destArg) ? destArg : path.resolve(cwd, destArg);
176
257
 
177
- // Prefer a cwd-relative path in messages; use the absolute path when the link lives outside it.
258
+ // Prefer a cwd-relative path in messages; fall back to absolute when outside.
178
259
  const show = (target) => {
179
260
  const rel = path.relative(cwd, target);
180
261
  return rel && !rel.startsWith('..') && !path.isAbsolute(rel) ? rel : target;
181
262
  };
182
263
 
264
+ // Preflight every selected skill tree before touching the destination at all.
265
+ for (const skillName of selected) {
266
+ validateSkillMd(path.join(skillsDir, skillName, 'SKILL.md'), skillName);
267
+ }
268
+
183
269
  try {
184
- fs.mkdirSync(skillsDir, { recursive: true });
270
+ fs.mkdirSync(destDir, { recursive: true });
185
271
  } catch (error) {
186
272
  if (error.code === 'ENOTDIR' || error.code === 'EEXIST') {
187
- fail(`Cannot create ${show(skillsDir)}: a parent path exists as a file, not a directory. Remove it and re-run.`);
273
+ fail(`Cannot create ${show(destDir)}: a parent path exists as a file, not a directory. Remove it and re-run.`);
188
274
  }
189
275
  if (isPermissionError(error)) {
190
- fail(`Cannot create ${show(skillsDir)}: permission denied. Check the destination permissions and re-run.`);
276
+ fail(`Cannot create ${show(destDir)}: permission denied. Check the destination permissions and re-run.`);
191
277
  }
192
278
  throw error;
193
279
  }
194
280
 
195
- // Idempotent, but only for the symlink we own: repoint an existing symlink (including a
196
- // dangling one), and refuse to touch a real directory a user may have hand-maintained here —
197
- // never recursively delete it.
198
- let existing = null;
199
- try {
200
- existing = fs.lstatSync(linkPath);
201
- } catch (error) {
202
- if (error.code === 'ENOENT') {
203
- existing = null;
204
- } else if (isPermissionError(error)) {
205
- fail(`Cannot inspect ${show(linkPath)}: permission denied. Check the destination permissions and re-run.`);
206
- } else {
207
- throw error;
208
- }
281
+ // Preflight all destination links before any mutation.
282
+ for (const skillName of selected) {
283
+ preflightDestLink(path.join(destDir, skillName), show);
209
284
  }
210
- if (existing) {
211
- if (!existing.isSymbolicLink()) {
212
- fail(`Refusing to replace ${show(linkPath)}: it exists and is not a symlink. Remove it manually and re-run.`);
213
- }
214
285
 
286
+ // All preflights passed — perform link operations.
287
+ const linkType = process.platform === 'win32' ? 'junction' : 'dir';
288
+ for (const skillName of selected) {
289
+ const skillDir = path.join(skillsDir, skillName);
290
+ const linkPath = path.join(destDir, skillName);
291
+
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.
294
+ let existingLink = null;
215
295
  try {
216
- if (fs.realpathSync(linkPath) === fs.realpathSync(skillDir)) {
217
- console.log(`Porsche Design System skill already linked: ${show(linkPath)} -> ${skillDir}`);
218
- return;
219
- }
296
+ existingLink = fs.lstatSync(linkPath);
220
297
  } catch (error) {
221
- if (error.code === 'ENOENT') {
222
- // The existing link is dangling and can be replaced.
223
- } else if (isPermissionError(error)) {
224
- fail(`Cannot inspect ${show(linkPath)}: permission denied. Check the destination permissions and re-run.`);
225
- } else {
298
+ if (error.code !== 'ENOENT') {
299
+ throw error;
300
+ }
301
+ }
302
+
303
+ if (existingLink?.isSymbolicLink()) {
304
+ try {
305
+ if (fs.realpathSync(linkPath) === fs.realpathSync(skillDir)) {
306
+ console.log(`Porsche Design System skill already linked: ${show(linkPath)} -> ${skillDir}`);
307
+ continue;
308
+ }
309
+ } 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
+ }
314
+ throw error;
315
+ }
316
+ // Dangling symlink — fall through to replace it.
317
+ }
318
+ try {
319
+ fs.rmSync(linkPath, { force: true });
320
+ } catch (error) {
321
+ if (isPermissionError(error)) {
322
+ fail(`Cannot replace ${show(linkPath)}: permission denied. Check the destination permissions and re-run.`);
323
+ }
226
324
  throw error;
227
325
  }
228
326
  }
327
+
229
328
  try {
230
- fs.rmSync(linkPath, { force: true });
329
+ fs.symlinkSync(skillDir, linkPath, linkType);
231
330
  } catch (error) {
331
+ if (process.platform === 'win32' && error.code === 'EPERM') {
332
+ fail(
333
+ `Could not create the skill junction on Windows (EPERM). Check the destination permissions or create it manually:\n mklink /J "${linkPath}" "${skillDir}"`
334
+ );
335
+ }
232
336
  if (isPermissionError(error)) {
233
- fail(`Cannot replace ${show(linkPath)}: permission denied. Check the destination permissions and re-run.`);
337
+ fail(`Cannot create ${show(linkPath)}: permission denied. Check the destination permissions and re-run.`);
234
338
  }
235
339
  throw error;
236
340
  }
237
- }
238
341
 
239
- // Windows has no unprivileged directory symlink; a junction needs no elevation and works with
240
- // the absolute target we already hold. macOS/Linux use a normal directory symlink.
241
- const linkType = process.platform === 'win32' ? 'junction' : 'dir';
242
- try {
243
- fs.symlinkSync(skillDir, linkPath, linkType);
244
- } catch (error) {
245
- if (process.platform === 'win32' && error.code === 'EPERM') {
246
- fail(
247
- `Could not create the skill junction on Windows (EPERM). Check the destination permissions or create it manually:\n mklink /J "${linkPath}" "${skillDir}"`
248
- );
249
- }
250
- if (isPermissionError(error)) {
251
- fail(`Cannot create ${show(linkPath)}: permission denied. Check the destination permissions and re-run.`);
252
- }
253
- throw error;
342
+ console.log(`Linked Porsche Design System skill: ${show(linkPath)} -> ${skillDir}`);
254
343
  }
255
-
256
- console.log(`Linked Porsche Design System skill: ${show(linkPath)} -> ${skillDir}`);
257
344
  };
258
345
 
259
346
  main();
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "cjs/index.cjs",
3
+ "module": "esm/index.mjs",
4
+ "types": "esm/index.d.ts",
5
+ "sideEffects": false
6
+ }