@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.
- package/CHANGELOG.md +65 -0
- package/bin/pds-skill.js +50 -41
- package/fesm2022/porsche-design-system-components-angular.mjs.map +1 -1
- package/package.json +2 -2
- package/skills/pds-audit-deprecations-angular/SKILL.md +247 -0
- package/skills/pds-audit-deprecations-angular/references/report-template.md +128 -0
- package/skills/pds-audit-deprecations-angular/references/report.schema.json +446 -0
- package/skills/pds-knowledge-angular/SKILL.md +9 -3
- package/skills/pds-knowledge-angular/references/components/p-button/examples/AiDropShadow.ts +33 -0
- package/skills/pds-knowledge-angular/references/components/p-button/examples/AiGradientGlow.ts +93 -0
- package/skills/pds-knowledge-angular/references/components/p-button/p-button.md +64 -2
- package/skills/pds-knowledge-angular/references/components/p-button-pure/p-button-pure.md +1 -1
- package/skills/pds-knowledge-angular/references/components/p-button-tile/p-button-tile.md +1 -1
- package/skills/pds-knowledge-angular/references/components/p-icon/examples/Overview.ts +2 -0
- package/skills/pds-knowledge-angular/references/components/p-icon/p-icon.md +1 -1
- package/skills/pds-knowledge-angular/references/components/p-inline-notification/p-inline-notification.md +1 -1
- package/skills/pds-knowledge-angular/references/components/p-link/p-link.md +12 -1
- package/skills/pds-knowledge-angular/references/components/p-link-pure/p-link-pure.md +1 -1
- package/skills/pds-knowledge-angular/references/components/p-segmented-control/p-segmented-control.md +1 -1
- package/skills/pds-knowledge-angular/references/components/p-tag/p-tag.md +1 -1
- package/skills/pds-knowledge-angular/references/deprecations.md +686 -0
- package/skills/pds-knowledge-angular/references/icons.md +1 -1
- package/skills/pds-knowledge-angular/references/styles/scss.md +3 -2
- package/skills/pds-knowledge-angular/references/styles/tailwindcss.md +0 -2
- package/tailwindcss/index.css +16 -16
- package/types/porsche-design-system-components-angular.d.ts +14 -9
- package/vanilla-extract/cjs/blur/deprecated/frostedGlassStyle.cjs +1 -1
- package/vanilla-extract/cjs/border/deprecated/border.cjs +1 -1
- package/vanilla-extract/cjs/border/deprecated/borderRadius.cjs +1 -1
- package/vanilla-extract/cjs/border/deprecated/borderRadiusLarge.cjs +1 -1
- package/vanilla-extract/cjs/border/deprecated/borderRadiusMedium.cjs +1 -1
- package/vanilla-extract/cjs/border/deprecated/borderRadiusSmall.cjs +1 -1
- package/vanilla-extract/cjs/border/deprecated/borderWidth.cjs +1 -1
- package/vanilla-extract/cjs/border/deprecated/borderWidthBase.cjs +1 -1
- package/vanilla-extract/cjs/border/deprecated/borderWidthThin.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/theme.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDark.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkBackgroundBase.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkBackgroundFrosted.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkBackgroundShading.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkBackgroundSurface.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkContrastHigh.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkContrastLow.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkContrastMedium.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkNotificationError.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkNotificationErrorSoft.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkNotificationInfo.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkNotificationInfoSoft.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkNotificationSuccess.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkNotificationSuccessSoft.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkNotificationWarning.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkNotificationWarningSoft.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkPrimary.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkStateActive.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkStateDisabled.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkStateFocus.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeDarkStateHover.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLight.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightBackgroundBase.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightBackgroundFrosted.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightBackgroundShading.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightBackgroundSurface.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightContrastHigh.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightContrastLow.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightContrastMedium.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightNotificationError.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightNotificationErrorSoft.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightNotificationInfo.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightNotificationInfoSoft.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightNotificationSuccess.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightNotificationSuccessSoft.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightNotificationWarning.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightNotificationWarningSoft.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightPrimary.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightStateActive.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightStateDisabled.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightStateFocus.cjs +1 -1
- package/vanilla-extract/cjs/color/deprecated/themeLightStateHover.cjs +1 -1
- package/vanilla-extract/cjs/focus/deprecated/getFocusStyle.cjs +1 -0
- package/vanilla-extract/cjs/font/deprecated/fontFamily.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontLineHeight.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontSize.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontSizeDisplay.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontSizeHeading.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontSizeHeadingLarge.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontSizeHeadingMedium.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontSizeHeadingSmall.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontSizeHeadingXLarge.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontSizeHeadingXXLarge.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontSizeText.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontSizeTextLarge.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontSizeTextMedium.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontSizeTextSmall.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontSizeTextXLarge.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontSizeTextXSmall.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontSizeTextXXSmall.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontStyle.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontStyleItalic.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontStyleNormal.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontVariant.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontWeight.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontWeightRegular.cjs +1 -1
- package/vanilla-extract/cjs/font/deprecated/fontWeightSemiBold.cjs +1 -1
- package/vanilla-extract/cjs/gradient/deprecated/gradientToBottomStyle.cjs +1 -1
- package/vanilla-extract/cjs/gradient/deprecated/gradientToLeftStyle.cjs +1 -1
- package/vanilla-extract/cjs/gradient/deprecated/gradientToRightStyle.cjs +1 -1
- package/vanilla-extract/cjs/gradient/deprecated/gradientToTopStyle.cjs +1 -1
- package/vanilla-extract/cjs/motion/deprecated/motionDurationLong.cjs +1 -1
- package/vanilla-extract/cjs/motion/deprecated/motionDurationModerate.cjs +1 -1
- package/vanilla-extract/cjs/motion/deprecated/motionDurationShort.cjs +1 -1
- package/vanilla-extract/cjs/motion/deprecated/motionDurationVeryLong.cjs +1 -1
- package/vanilla-extract/cjs/motion/deprecated/motionEasingBase.cjs +1 -1
- package/vanilla-extract/cjs/motion/deprecated/motionEasingIn.cjs +1 -1
- package/vanilla-extract/cjs/motion/deprecated/motionEasingOut.cjs +1 -1
- package/vanilla-extract/cjs/shadow/deprecated/dropShadowHighStyle.cjs +1 -1
- package/vanilla-extract/cjs/shadow/deprecated/dropShadowLowStyle.cjs +1 -1
- package/vanilla-extract/cjs/shadow/deprecated/dropShadowMediumStyle.cjs +1 -1
- package/vanilla-extract/cjs/spacing/deprecated/spacing.cjs +1 -1
- package/vanilla-extract/cjs/spacing/deprecated/spacingFluid.cjs +1 -1
- package/vanilla-extract/cjs/spacing/deprecated/spacingFluidLarge.cjs +1 -1
- package/vanilla-extract/cjs/spacing/deprecated/spacingFluidMedium.cjs +1 -1
- package/vanilla-extract/cjs/spacing/deprecated/spacingFluidSmall.cjs +1 -1
- package/vanilla-extract/cjs/spacing/deprecated/spacingFluidXLarge.cjs +1 -1
- package/vanilla-extract/cjs/spacing/deprecated/spacingFluidXSmall.cjs +1 -1
- package/vanilla-extract/cjs/spacing/deprecated/spacingFluidXXLarge.cjs +1 -1
- package/vanilla-extract/cjs/spacing/deprecated/spacingStatic.cjs +1 -1
- package/vanilla-extract/cjs/spacing/deprecated/spacingStaticLarge.cjs +1 -1
- package/vanilla-extract/cjs/spacing/deprecated/spacingStaticMedium.cjs +1 -1
- package/vanilla-extract/cjs/spacing/deprecated/spacingStaticSmall.cjs +1 -1
- package/vanilla-extract/cjs/spacing/deprecated/spacingStaticXLarge.cjs +1 -1
- package/vanilla-extract/cjs/spacing/deprecated/spacingStaticXSmall.cjs +1 -1
- package/vanilla-extract/cjs/spacing/deprecated/spacingStaticXXLarge.cjs +1 -1
- package/vanilla-extract/cjs/typography/deprecated/display/displayLargeStyle.cjs +1 -1
- package/vanilla-extract/cjs/typography/deprecated/display/displayMediumStyle.cjs +1 -1
- package/vanilla-extract/cjs/typography/deprecated/display/displaySmallStyle.cjs +1 -1
- package/vanilla-extract/cjs/typography/deprecated/heading/headingLargeStyle.cjs +1 -1
- package/vanilla-extract/cjs/typography/deprecated/heading/headingMediumStyle.cjs +1 -1
- package/vanilla-extract/cjs/typography/deprecated/heading/headingSmallStyle.cjs +1 -1
- package/vanilla-extract/cjs/typography/deprecated/heading/headingXLargeStyle.cjs +1 -1
- package/vanilla-extract/cjs/typography/deprecated/heading/headingXXLargeStyle.cjs +1 -1
- package/vanilla-extract/cjs/typography/deprecated/text/textLargeStyle.cjs +1 -1
- package/vanilla-extract/cjs/typography/deprecated/text/textMediumStyle.cjs +1 -1
- package/vanilla-extract/cjs/typography/deprecated/text/textSmallStyle.cjs +1 -1
- package/vanilla-extract/cjs/typography/deprecated/text/textXLargeStyle.cjs +1 -1
- package/vanilla-extract/cjs/typography/deprecated/text/textXSmallStyle.cjs +1 -1
- package/vanilla-extract/cjs/typography/deprecated/text/textXXSmallStyle.cjs +1 -1
- package/vanilla-extract/esm/blur/deprecated/frostedGlassStyle.d.ts +1 -1
- package/vanilla-extract/esm/blur/deprecated/frostedGlassStyle.mjs +1 -1
- package/vanilla-extract/esm/border/deprecated/border.d.ts +1 -1
- package/vanilla-extract/esm/border/deprecated/border.mjs +1 -1
- package/vanilla-extract/esm/border/deprecated/borderRadius.d.ts +1 -1
- package/vanilla-extract/esm/border/deprecated/borderRadius.mjs +1 -1
- package/vanilla-extract/esm/border/deprecated/borderRadiusLarge.d.ts +1 -1
- package/vanilla-extract/esm/border/deprecated/borderRadiusLarge.mjs +1 -1
- package/vanilla-extract/esm/border/deprecated/borderRadiusMedium.d.ts +1 -1
- package/vanilla-extract/esm/border/deprecated/borderRadiusMedium.mjs +1 -1
- package/vanilla-extract/esm/border/deprecated/borderRadiusSmall.d.ts +1 -1
- package/vanilla-extract/esm/border/deprecated/borderRadiusSmall.mjs +1 -1
- package/vanilla-extract/esm/border/deprecated/borderWidth.d.ts +1 -1
- package/vanilla-extract/esm/border/deprecated/borderWidth.mjs +1 -1
- package/vanilla-extract/esm/border/deprecated/borderWidthBase.d.ts +1 -1
- package/vanilla-extract/esm/border/deprecated/borderWidthBase.mjs +1 -1
- package/vanilla-extract/esm/border/deprecated/borderWidthThin.d.ts +1 -1
- package/vanilla-extract/esm/border/deprecated/borderWidthThin.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/theme.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/theme.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDark.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDark.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkBackgroundBase.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkBackgroundBase.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkBackgroundFrosted.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkBackgroundFrosted.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkBackgroundShading.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkBackgroundShading.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkBackgroundSurface.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkBackgroundSurface.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkContrastHigh.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkContrastHigh.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkContrastLow.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkContrastLow.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkContrastMedium.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkContrastMedium.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkNotificationError.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkNotificationError.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkNotificationErrorSoft.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkNotificationErrorSoft.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkNotificationInfo.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkNotificationInfo.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkNotificationInfoSoft.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkNotificationInfoSoft.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkNotificationSuccess.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkNotificationSuccess.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkNotificationSuccessSoft.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkNotificationSuccessSoft.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkNotificationWarning.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkNotificationWarning.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkNotificationWarningSoft.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkNotificationWarningSoft.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkPrimary.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkPrimary.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkStateActive.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkStateActive.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkStateDisabled.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkStateDisabled.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkStateFocus.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkStateFocus.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkStateHover.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeDarkStateHover.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLight.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLight.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightBackgroundBase.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightBackgroundBase.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightBackgroundFrosted.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightBackgroundFrosted.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightBackgroundShading.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightBackgroundShading.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightBackgroundSurface.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightBackgroundSurface.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightContrastHigh.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightContrastHigh.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightContrastLow.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightContrastLow.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightContrastMedium.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightContrastMedium.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightNotificationError.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightNotificationError.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightNotificationErrorSoft.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightNotificationErrorSoft.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightNotificationInfo.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightNotificationInfo.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightNotificationInfoSoft.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightNotificationInfoSoft.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightNotificationSuccess.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightNotificationSuccess.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightNotificationSuccessSoft.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightNotificationSuccessSoft.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightNotificationWarning.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightNotificationWarning.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightNotificationWarningSoft.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightNotificationWarningSoft.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightPrimary.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightPrimary.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightStateActive.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightStateActive.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightStateDisabled.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightStateDisabled.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightStateFocus.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightStateFocus.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightStateHover.d.ts +1 -1
- package/vanilla-extract/esm/color/deprecated/themeLightStateHover.mjs +1 -1
- package/vanilla-extract/esm/color/deprecated/themeShared.d.ts +1 -1
- package/vanilla-extract/esm/focus/deprecated/getFocusStyle.d.ts +1 -0
- package/vanilla-extract/esm/focus/deprecated/getFocusStyle.mjs +1 -0
- package/vanilla-extract/esm/font/deprecated/fontFamily.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontFamily.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontLineHeight.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontLineHeight.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSize.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSize.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeDisplay.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeDisplay.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeHeading.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeHeading.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeHeadingLarge.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeHeadingLarge.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeHeadingMedium.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeHeadingMedium.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeHeadingSmall.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeHeadingSmall.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeHeadingXLarge.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeHeadingXLarge.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeHeadingXXLarge.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeHeadingXXLarge.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeText.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeText.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeTextLarge.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeTextLarge.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeTextMedium.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeTextMedium.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeTextSmall.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeTextSmall.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeTextXLarge.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeTextXLarge.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeTextXSmall.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeTextXSmall.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeTextXXSmall.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontSizeTextXXSmall.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontStyle.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontStyle.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontStyleItalic.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontStyleItalic.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontStyleNormal.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontStyleNormal.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontVariant.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontVariant.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontWeight.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontWeight.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontWeightRegular.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontWeightRegular.mjs +1 -1
- package/vanilla-extract/esm/font/deprecated/fontWeightSemiBold.d.ts +1 -1
- package/vanilla-extract/esm/font/deprecated/fontWeightSemiBold.mjs +1 -1
- package/vanilla-extract/esm/gradient/deprecated/gradientToBottomStyle.d.ts +1 -1
- package/vanilla-extract/esm/gradient/deprecated/gradientToBottomStyle.mjs +1 -1
- package/vanilla-extract/esm/gradient/deprecated/gradientToLeftStyle.d.ts +1 -1
- package/vanilla-extract/esm/gradient/deprecated/gradientToLeftStyle.mjs +1 -1
- package/vanilla-extract/esm/gradient/deprecated/gradientToRightStyle.d.ts +1 -1
- package/vanilla-extract/esm/gradient/deprecated/gradientToRightStyle.mjs +1 -1
- package/vanilla-extract/esm/gradient/deprecated/gradientToTopStyle.d.ts +1 -1
- package/vanilla-extract/esm/gradient/deprecated/gradientToTopStyle.mjs +1 -1
- package/vanilla-extract/esm/motion/deprecated/motionDurationLong.d.ts +1 -1
- package/vanilla-extract/esm/motion/deprecated/motionDurationLong.mjs +1 -1
- package/vanilla-extract/esm/motion/deprecated/motionDurationModerate.d.ts +1 -1
- package/vanilla-extract/esm/motion/deprecated/motionDurationModerate.mjs +1 -1
- package/vanilla-extract/esm/motion/deprecated/motionDurationShort.d.ts +1 -1
- package/vanilla-extract/esm/motion/deprecated/motionDurationShort.mjs +1 -1
- package/vanilla-extract/esm/motion/deprecated/motionDurationVeryLong.d.ts +1 -1
- package/vanilla-extract/esm/motion/deprecated/motionDurationVeryLong.mjs +1 -1
- package/vanilla-extract/esm/motion/deprecated/motionEasingBase.d.ts +1 -1
- package/vanilla-extract/esm/motion/deprecated/motionEasingBase.mjs +1 -1
- package/vanilla-extract/esm/motion/deprecated/motionEasingIn.d.ts +1 -1
- package/vanilla-extract/esm/motion/deprecated/motionEasingIn.mjs +1 -1
- package/vanilla-extract/esm/motion/deprecated/motionEasingOut.d.ts +1 -1
- package/vanilla-extract/esm/motion/deprecated/motionEasingOut.mjs +1 -1
- package/vanilla-extract/esm/shadow/deprecated/dropShadowHighStyle.d.ts +1 -1
- package/vanilla-extract/esm/shadow/deprecated/dropShadowHighStyle.mjs +1 -1
- package/vanilla-extract/esm/shadow/deprecated/dropShadowLowStyle.d.ts +1 -1
- package/vanilla-extract/esm/shadow/deprecated/dropShadowLowStyle.mjs +1 -1
- package/vanilla-extract/esm/shadow/deprecated/dropShadowMediumStyle.d.ts +1 -1
- package/vanilla-extract/esm/shadow/deprecated/dropShadowMediumStyle.mjs +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacing.d.ts +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacing.mjs +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingFluid.d.ts +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingFluid.mjs +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingFluidLarge.d.ts +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingFluidLarge.mjs +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingFluidMedium.d.ts +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingFluidMedium.mjs +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingFluidSmall.d.ts +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingFluidSmall.mjs +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingFluidXLarge.d.ts +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingFluidXLarge.mjs +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingFluidXSmall.d.ts +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingFluidXSmall.mjs +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingFluidXXLarge.d.ts +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingFluidXXLarge.mjs +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingStatic.d.ts +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingStatic.mjs +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingStaticLarge.d.ts +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingStaticLarge.mjs +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingStaticMedium.d.ts +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingStaticMedium.mjs +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingStaticSmall.d.ts +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingStaticSmall.mjs +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingStaticXLarge.d.ts +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingStaticXLarge.mjs +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingStaticXSmall.d.ts +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingStaticXSmall.mjs +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingStaticXXLarge.d.ts +1 -1
- package/vanilla-extract/esm/spacing/deprecated/spacingStaticXXLarge.mjs +1 -1
- package/vanilla-extract/esm/typography/deprecated/display/displayLargeStyle.d.ts +1 -1
- package/vanilla-extract/esm/typography/deprecated/display/displayLargeStyle.mjs +1 -1
- package/vanilla-extract/esm/typography/deprecated/display/displayMediumStyle.d.ts +1 -1
- package/vanilla-extract/esm/typography/deprecated/display/displayMediumStyle.mjs +1 -1
- package/vanilla-extract/esm/typography/deprecated/display/displaySmallStyle.d.ts +1 -1
- package/vanilla-extract/esm/typography/deprecated/display/displaySmallStyle.mjs +1 -1
- package/vanilla-extract/esm/typography/deprecated/heading/headingLargeStyle.d.ts +1 -1
- package/vanilla-extract/esm/typography/deprecated/heading/headingLargeStyle.mjs +1 -1
- package/vanilla-extract/esm/typography/deprecated/heading/headingMediumStyle.d.ts +1 -1
- package/vanilla-extract/esm/typography/deprecated/heading/headingMediumStyle.mjs +1 -1
- package/vanilla-extract/esm/typography/deprecated/heading/headingSmallStyle.d.ts +1 -1
- package/vanilla-extract/esm/typography/deprecated/heading/headingSmallStyle.mjs +1 -1
- package/vanilla-extract/esm/typography/deprecated/heading/headingXLargeStyle.d.ts +1 -1
- package/vanilla-extract/esm/typography/deprecated/heading/headingXLargeStyle.mjs +1 -1
- package/vanilla-extract/esm/typography/deprecated/heading/headingXXLargeStyle.d.ts +1 -1
- package/vanilla-extract/esm/typography/deprecated/heading/headingXXLargeStyle.mjs +1 -1
- package/vanilla-extract/esm/typography/deprecated/text/textLargeStyle.d.ts +1 -1
- package/vanilla-extract/esm/typography/deprecated/text/textLargeStyle.mjs +1 -1
- package/vanilla-extract/esm/typography/deprecated/text/textMediumStyle.d.ts +1 -1
- package/vanilla-extract/esm/typography/deprecated/text/textMediumStyle.mjs +1 -1
- package/vanilla-extract/esm/typography/deprecated/text/textSmallStyle.d.ts +1 -1
- package/vanilla-extract/esm/typography/deprecated/text/textSmallStyle.mjs +1 -1
- package/vanilla-extract/esm/typography/deprecated/text/textXLargeStyle.d.ts +1 -1
- package/vanilla-extract/esm/typography/deprecated/text/textXLargeStyle.mjs +1 -1
- package/vanilla-extract/esm/typography/deprecated/text/textXSmallStyle.d.ts +1 -1
- package/vanilla-extract/esm/typography/deprecated/text/textXSmallStyle.mjs +1 -1
- package/vanilla-extract/esm/typography/deprecated/text/textXXSmallStyle.d.ts +1 -1
- 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
|
-
//
|
|
4
|
-
//
|
|
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
|
-
/**
|
|
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
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
|
|
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
|
|
311
|
-
|
|
312
|
-
|
|
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(
|
|
338
|
+
fs.symlinkSync(linkTarget, linkPath, linkType);
|
|
330
339
|
} catch (error) {
|
|
331
340
|
if (process.platform === 'win32' && error.code === 'EPERM') {
|
|
332
341
|
fail(
|