@porsche-design-system/components-react 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.
- package/CHANGELOG.md +24 -0
- package/bin/pds-skill.js +166 -79
- package/package.json +2 -2
- package/{skill → skills/pds-knowledge-react}/SKILL.md +6 -6
- package/skills/pds-knowledge-react/references/components/p-accordion/accessibility.md +63 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-accordion/p-accordion.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-banner/accessibility.md +37 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-banner/p-banner.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-button/accessibility.md +61 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-button/p-button.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-button-pure/accessibility.md +61 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-button-pure/p-button-pure.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-button-tile/accessibility.md +31 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-button-tile/p-button-tile.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-canvas/examples/Default.tsx +111 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-canvas/p-canvas.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-carousel/accessibility.md +61 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-carousel/p-carousel.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-checkbox/accessibility.md +31 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-checkbox/p-checkbox.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-crest/accessibility.md +17 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-crest/p-crest.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-divider/accessibility.md +41 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-divider/p-divider.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-drilldown/accessibility.md +65 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-drilldown/p-drilldown.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-fieldset/accessibility.md +37 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-fieldset/p-fieldset.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-flag/accessibility.md +39 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-flag/p-flag.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-flyout/accessibility.md +80 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-flyout/p-flyout.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-heading/accessibility.md +29 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-heading/p-heading.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-icon/accessibility.md +39 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-icon/p-icon.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-inline-notification/accessibility.md +36 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-inline-notification/p-inline-notification.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-input-date/accessibility.md +45 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-input-date/p-input-date.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-input-email/accessibility.md +45 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-input-email/p-input-email.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-input-month/accessibility.md +45 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-input-month/p-input-month.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-input-number/accessibility.md +45 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-input-number/p-input-number.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-input-password/accessibility.md +45 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-input-password/p-input-password.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-input-search/accessibility.md +59 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-input-search/p-input-search.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-input-tel/accessibility.md +45 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-input-tel/p-input-tel.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-input-text/accessibility.md +45 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-input-text/p-input-text.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-input-time/accessibility.md +45 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-input-time/p-input-time.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-input-url/accessibility.md +45 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-input-url/p-input-url.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-input-week/accessibility.md +45 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-input-week/p-input-week.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-link/accessibility.md +73 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-link/p-link.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-link-pure/accessibility.md +73 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-link-pure/p-link-pure.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-link-tile/accessibility.md +31 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-link-tile/p-link-tile.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-modal/accessibility.md +80 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-modal/p-modal.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-multi-select/accessibility.md +78 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-multi-select/p-multi-select.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-pagination/accessibility.md +23 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-pagination/p-pagination.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-pin-code/accessibility.md +45 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-pin-code/p-pin-code.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-popover/accessibility.md +61 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-popover/p-popover.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-radio-group/accessibility.md +63 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-radio-group/p-radio-group.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-scroller/accessibility.md +31 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-scroller/p-scroller.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-segmented-control/accessibility.md +67 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-segmented-control/p-segmented-control.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-select/accessibility.md +140 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-select/p-select.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-sheet/accessibility.md +80 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-sheet/p-sheet.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-spinner/accessibility.md +31 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-spinner/p-spinner.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-stepper-horizontal/accessibility.md +34 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-stepper-horizontal/p-stepper-horizontal.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-switch/accessibility.md +35 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-switch/p-switch.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-table/accessibility.md +47 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-table/examples/Sorting.tsx +9 -8
- package/{skill → skills/pds-knowledge-react}/references/components/p-table/p-table.md +5 -1
- package/skills/pds-knowledge-react/references/components/p-tabs/accessibility.md +56 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-tabs/p-tabs.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-tabs-bar/accessibility.md +61 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-tabs-bar/p-tabs-bar.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-tag/accessibility.md +19 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-tag/p-tag.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-tag-dismissible/accessibility.md +35 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-tag-dismissible/p-tag-dismissible.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-text/accessibility.md +21 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-text/p-text.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-text-list/accessibility.md +31 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-text-list/p-text-list.md +4 -0
- package/skills/pds-knowledge-react/references/components/p-textarea/accessibility.md +45 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-textarea/p-textarea.md +4 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-toast/p-toast.md +1 -1
- package/skills/pds-knowledge-react/references/components/p-wordmark/accessibility.md +31 -0
- package/{skill → skills/pds-knowledge-react}/references/components/p-wordmark/p-wordmark.md +4 -0
- package/{skill → skills/pds-knowledge-react}/references/styles/tailwindcss.md +1 -1
- package/ssr/cjs/components/dist/styles/esm/styles-entry.cjs +5 -5
- package/ssr/cjs/components/dist/utils/esm/utils-entry.cjs +1 -1
- package/ssr/esm/components/dist/styles/esm/styles-entry.mjs +5 -5
- package/ssr/esm/components/dist/utils/esm/utils-entry.mjs +1 -1
- package/skill/references/components/p-canvas/examples/Default.tsx +0 -10
- /package/{skill → skills/pds-knowledge-react}/references/components/p-accordion/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-accordion/examples/InteractiveElementsInSummary.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-accordion/examples/StickySummary.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-ai-tag/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-ai-tag/examples/WithinCheckbox.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-ai-tag/examples/WithinFormLabel.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-ai-tag/examples/WithinImage.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-ai-tag/examples/WithinInputSearch.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-ai-tag/examples/WithinRadioGroup.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-ai-tag/examples/WithinTable.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-ai-tag/examples/WithinText.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-ai-tag/p-ai-tag.md +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-banner/examples/Customization.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-banner/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-button/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-button/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-button/examples/FormAttribute.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-button-pure/examples/CustomClickableArea.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-button-pure/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-button-pure/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-button-pure/examples/FormAttribute.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-button-tile/examples/ColorScheme.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-button-tile/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-button-tile/examples/FooterSlot.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-button-tile/examples/Hyphens.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-button-tile/examples/UiBehaviour.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-carousel/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-carousel/examples/DynamicSlides.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-carousel/examples/FlexibleWidths.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-carousel/examples/FocusOnCenterSlide.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-carousel/examples/Intl.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-carousel/examples/JumpToSlide.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-checkbox/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-checkbox/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-checkbox/examples/Indeterminate.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-checkbox/examples/Slots.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-checkbox/examples/WrappedLabel.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-crest/examples/CustomClickableArea.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-crest/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-crest/examples/Link.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-display/examples/Color.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-display/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-display/examples/Semantics.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-display/examples/Size.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-display/examples/SizeResponsive.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-display/p-display.md +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-divider/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-divider/examples/Responsive.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-divider/examples/Vertical.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-drilldown/examples/CustomContent.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-drilldown/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-fieldset/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-fieldset/examples/Required.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-fieldset/examples/SlottedLabel.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-fieldset/examples/SlottedMessage.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-flag/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-flag/examples/ResponsiveSize.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-flag/examples/Size.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-flag/examples/SizeCssVar.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-flyout/examples/CustomStyling.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-flyout/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-flyout/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-flyout/examples/StickyTop.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-heading/examples/Color.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-heading/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-heading/examples/Semantics.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-icon/examples/Color.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-icon/examples/ColorCssVar.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-icon/examples/Custom.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-icon/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-icon/examples/Overview.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-icon/examples/ResponsiveSize.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-icon/examples/Size.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-icon/examples/SizeCssVar.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-inline-notification/examples/ActionButton.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-inline-notification/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-inline-notification/examples/EventHandling.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-date/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-date/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-date/examples/Slots.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-email/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-email/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-email/examples/Slots.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-month/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-month/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-month/examples/Slots.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-number/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-number/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-number/examples/Slots.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-password/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-password/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-password/examples/Slots.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-password/examples/Toggle.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-search/examples/AriaCombobox.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-search/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-search/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-search/examples/Slots.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-tel/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-tel/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-tel/examples/Slots.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-text/examples/Controlled.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-text/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-text/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-text/examples/Slots.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-time/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-time/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-time/examples/Slots.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-url/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-url/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-url/examples/Slots.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-week/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-week/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-input-week/examples/Slots.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-link/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-link/examples/FrameworkRouting.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-link/examples/Icon.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-link-pure/examples/CustomClickableArea.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-link-pure/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-link-pure/examples/FrameworkRouting.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-link-pure/examples/Icon.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-link-tile/examples/ColorScheme.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-link-tile/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-link-tile/examples/FooterSlot.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-link-tile/examples/Hyphens.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-link-tile/examples/UiBehaviour.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-link-tile/examples/WithVideo.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-link-tile-product/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-link-tile-product/examples/FrameworkRouting.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-link-tile-product/p-link-tile-product.md +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-modal/examples/AlertDialog.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-modal/examples/CustomStyling.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-modal/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-modal/examples/Scrollable.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-model-signature/examples/CustomStyling.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-model-signature/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-model-signature/examples/MaskBlendMode.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-model-signature/examples/MaskImage.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-model-signature/examples/MaskVideo.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-model-signature/examples/SafeZone.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-model-signature/p-model-signature.md +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-multi-select/examples/AsyncFilter.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-multi-select/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-multi-select/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-multi-select/examples/Optgroups.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-multi-select/examples/SelectedSlot.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-multi-select/examples/SetValue.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-multi-select/examples/Slots.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-pagination/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-pin-code/examples/CopyPaste.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-pin-code/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-pin-code/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-pin-code/examples/Slots.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-popover/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-popover/examples/SlottedButton.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-radio-group/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-radio-group/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-radio-group/examples/Slots.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-scroller/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-scroller/examples/Height.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-scroller/examples/ScrollToPosition.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-segmented-control/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-segmented-control/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-segmented-control/examples/Slots.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-segmented-control/examples/WithLabels.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-select/examples/AsyncFilter.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-select/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-select/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-select/examples/Optgroups.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-select/examples/Required.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-select/examples/SelectedSlot.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-select/examples/SetValue.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-select/examples/Slots.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-select/examples/SlottedImages.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-sheet/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-spinner/examples/Color.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-spinner/examples/ColorCssVar.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-spinner/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-spinner/examples/ResponsiveSize.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-spinner/examples/Size.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-spinner/examples/SizeCssVar.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-stepper-horizontal/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-stepper-horizontal/examples/FrameworkImplementation.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-switch/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-table/examples/Advanced.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-table/examples/CaptionProperty.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-table/examples/CaptionSlot.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-table/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-table/examples/HideLabel.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-table/examples/LayoutFixed.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-tabs/examples/ActiveTab.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-tabs/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-tabs/examples/Gradient.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-tabs/examples/Labelling.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-tabs-bar/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-tabs-bar/examples/Gradient.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-tabs-bar/examples/Labelling.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-tabs-bar/examples/Links.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-tag/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-tag/examples/Multiline.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-tag/examples/SlottedButton.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-tag/examples/SlottedLink.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-tag-dismissible/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-text/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-text/examples/Semantics.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-text/examples/Size.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-text/examples/SizeResponsive.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-text-list/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-textarea/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-textarea/examples/Form.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-textarea/examples/Slots.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-toast/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-wordmark/examples/CustomClickableArea.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-wordmark/examples/Default.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/components/p-wordmark/examples/Size.tsx +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/icons.md +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/styles/emotion.md +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/styles/scss.md +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/styles/vanilla-extract.md +0 -0
- /package/{skill → skills/pds-knowledge-react}/references/stylesheets.md +0 -0
- /package/{skill → skills/pds-knowledge-react}/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
|
package/bin/pds-skill.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
// Links
|
|
4
|
-
// wrapper exposes this same bin through the local node_modules/.bin directory;
|
|
5
|
-
// which installed wrapper supplies the
|
|
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
|
|
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
|
-
//
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
153
|
-
|
|
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
|
|
172
|
-
|
|
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
|
|
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;
|
|
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(
|
|
270
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
185
271
|
} catch (error) {
|
|
186
272
|
if (error.code === 'ENOTDIR' || error.code === 'EEXIST') {
|
|
187
|
-
fail(`Cannot create ${show(
|
|
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(
|
|
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
|
-
//
|
|
196
|
-
|
|
197
|
-
|
|
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
|
-
|
|
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
|
|
222
|
-
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
|
|
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.
|
|
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
|
|
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
|
-
|
|
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();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@porsche-design-system/components-react",
|
|
3
|
-
"version": "4.6.0-rc.
|
|
3
|
+
"version": "4.6.0-rc.1",
|
|
4
4
|
"description": "Porsche Design System is a component library designed to help developers create the best experience for software or services distributed by Dr. Ing. h.c. F. Porsche AG.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"porsche",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"url": "https://github.com/porsche-design-system/porsche-design-system"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@porsche-design-system/components-js": "4.6.0-rc.
|
|
24
|
+
"@porsche-design-system/components-js": "4.6.0-rc.1"
|
|
25
25
|
},
|
|
26
26
|
"peerDependencies": {
|
|
27
27
|
"ag-grid-community": ">= 36.0.0 <37.0.0",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: pds-knowledge-react
|
|
3
3
|
description: Build, style, or review web user interfaces with the Porsche Design System (PDS), or author and review documents that specify PDS behavior. Use whenever a task touches frontend UI — adding or changing components (buttons, forms, inputs, cards, tables, modals, navigation, layouts), styling with Tailwind, SCSS, vanilla-extract or Emotion, applying design tokens, or scaffolding a new page or form. Also use whenever a requirement, spec, design doc, or acceptance criteria names a PDS component, prop, token, or theming. Prefer PDS for new UI even when it is not named by the user. Do not activate for backend or non-UI logic, unrelated tests or tooling, documentation or prose that does not assert PDS component, prop, token, or theming behavior, work that clearly targets a different UI library, or when the user opts out of PDS.
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -7,7 +7,7 @@ description: Build, style, or review web user interfaces with the Porsche Design
|
|
|
7
7
|
|
|
8
8
|
Version-exact knowledge of the installed Porsche Design System: every fact, prop, token and example here matches the installed package exactly — never mix guidance across versions. Every reference path is relative to this skill root unless noted otherwise.
|
|
9
9
|
|
|
10
|
-
This skill ships inside the installed wrapper package alongside its inspectable package artifacts: the typings, `component-meta` (`@porsche-design-system/components-js/meta`), the SCSS partials (`@porsche-design-system/components-js/scss`), the design tokens (
|
|
10
|
+
This skill ships inside the installed wrapper package alongside its inspectable package artifacts: the typings, `component-meta` (`@porsche-design-system/components-js/meta`), the SCSS partials (`@porsche-design-system/components-js/scss`), the design tokens (`../../tokens`), the Tailwind theme (`../../tailwindcss/index.css`) and the shipped global CSS. The underlying Stencil component implementation is not included in the npm package; it is loaded from the Porsche Design System CDN at runtime. The wrapper's own `meta` and `scss` are re-export shims of the same-version `@porsche-design-system/components-js` peer, so those two point at the peer directly.
|
|
11
11
|
|
|
12
12
|
Prefer Porsche Design System components and tokens for new UI, even when the user does not name PDS. Do not rewrite non-PDS UI unasked, and do not hijack work that targets another library.
|
|
13
13
|
|
|
@@ -15,11 +15,11 @@ Prefer Porsche Design System components and tokens for new UI, even when the use
|
|
|
15
15
|
|
|
16
16
|
This skill currently covers components, global stylesheets and theming, tokens, and styling integrations. It does not yet include complete getting-started, setup, and installation guidance; the v3-to-v4 migration guide; the changelog; partials; patterns and templates; the AG Grid theme; or the Storefront’s Must Know and Help sections.
|
|
17
17
|
|
|
18
|
-
Before using documentation outside this skill or the installed package, match it to the installed PDS version. This skill was generated for `4.6.0-rc.
|
|
18
|
+
Before using documentation outside this skill or the installed package, match it to the installed PDS version. This skill was generated for `4.6.0-rc.1`; prefer the [exact-version Porsche Design System Storefront](https://designsystem.porsche.com/v4.6.0-rc.1/). Major-version URLs such as `/v4/` always serve the latest v4 release and may describe APIs or setup introduced after the installed version. Use them only as a fallback and verify relevant details against the installed package.
|
|
19
19
|
|
|
20
|
-
For runnable patterns and templates, consult the [Porsche Design System examples repository](https://github.com/porsche-design-system/examples), selecting a release tag or commit that matches the installed package instead of assuming its default branch is compatible. For release-specific changes, read
|
|
20
|
+
For runnable patterns and templates, consult the [Porsche Design System examples repository](https://github.com/porsche-design-system/examples), selecting a release tag or commit that matches the installed package instead of assuming its default branch is compatible. For release-specific changes, read `../../CHANGELOG.md`.
|
|
21
21
|
|
|
22
|
-
For exact API facts, inspect the installed typings and metadata first. When readable implementation details are necessary, use the [exact-version component source](https://github.com/porsche-design-system/porsche-design-system/tree/v4.6.0-rc.
|
|
22
|
+
For exact API facts, inspect the installed typings and metadata first. When readable implementation details are necessary, use the [exact-version component source](https://github.com/porsche-design-system/porsche-design-system/tree/v4.6.0-rc.1/packages/components/src/components) under the repository's `packages/components/src/components/<component>` directory. Do not use the default branch, which may represent a newer release.
|
|
23
23
|
|
|
24
24
|
For deployed browser behavior, inspect component requests in the Network panel. Treat these minified, content-hashed CDN artifacts as a debugging fallback; use the exact-version repository source for readable implementation details.
|
|
25
25
|
|
|
@@ -110,7 +110,7 @@ import { PButton, PorscheDesignSystemProvider } from '@porsche-design-system/com
|
|
|
110
110
|
|
|
111
111
|
On the server, the `/ssr` build emits component markup and styles as Declarative Shadow DOM so the browser can create the Shadow DOM before JavaScript runs. In the browser, it initializes like the standard React wrapper. The framework build must replace `process.browser` for its server and client targets and eliminate the unused branch.
|
|
112
112
|
|
|
113
|
-
Framework setup differs. Follow the [Next.js integration guide](https://designsystem.porsche.com/v4.6.0-rc.
|
|
113
|
+
Framework setup differs. Follow the [Next.js integration guide](https://designsystem.porsche.com/v4.6.0-rc.1/developing/next-js/getting-started/) or the [React Router integration guide](https://designsystem.porsche.com/v4.6.0-rc.1/developing/react-router/getting-started/). Remix users should follow the React Router guidance because Remix v2 was upstreamed into React Router.
|
|
114
114
|
|
|
115
115
|
## Stylesheets
|
|
116
116
|
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# p-accordion accessibility integration examples
|
|
2
|
+
|
|
3
|
+
## Integration examples
|
|
4
|
+
|
|
5
|
+
### Accordion summary without semantic heading
|
|
6
|
+
|
|
7
|
+
#### ❌ Anti-pattern
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
<PAccordion>
|
|
11
|
+
<span slot="summary">
|
|
12
|
+
Delivery options
|
|
13
|
+
</span>
|
|
14
|
+
<PText>
|
|
15
|
+
Content about delivery.
|
|
16
|
+
</PText>
|
|
17
|
+
</PAccordion>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
#### ✅ Recommended
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
<PAccordion>
|
|
24
|
+
<PHeading slot="summary" tag="h2" size="sm">
|
|
25
|
+
Delivery options
|
|
26
|
+
</PHeading>
|
|
27
|
+
<PText>
|
|
28
|
+
Content about delivery.
|
|
29
|
+
</PText>
|
|
30
|
+
</PAccordion>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Skipped heading level
|
|
34
|
+
|
|
35
|
+
#### ❌ Anti-pattern
|
|
36
|
+
|
|
37
|
+
```tsx
|
|
38
|
+
<PHeading tag="h1">
|
|
39
|
+
Configure your Porsche
|
|
40
|
+
</PHeading>
|
|
41
|
+
|
|
42
|
+
<PAccordion>
|
|
43
|
+
<PHeading slot="summary" tag="h4" size="sm">
|
|
44
|
+
Delivery options
|
|
45
|
+
</PHeading>
|
|
46
|
+
...
|
|
47
|
+
</PAccordion>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
#### ✅ Recommended
|
|
51
|
+
|
|
52
|
+
```tsx
|
|
53
|
+
<PHeading tag="h1">
|
|
54
|
+
Configure your Porsche
|
|
55
|
+
</PHeading>
|
|
56
|
+
|
|
57
|
+
<PAccordion>
|
|
58
|
+
<PHeading slot="summary" tag="h2" size="sm">
|
|
59
|
+
Delivery options
|
|
60
|
+
</PHeading>
|
|
61
|
+
...
|
|
62
|
+
</PAccordion>
|
|
63
|
+
```
|
package/{skill → skills/pds-knowledge-react}/references/components/p-accordion/p-accordion.md
RENAMED
|
@@ -42,6 +42,10 @@ The accordion summary should be a heading element (e.g.,`p-heading` or `<h1>` to
|
|
|
42
42
|
- **Do** keep heading levels sequential across multiple accordions on a page.
|
|
43
43
|
- **Don't** use plain text in the summary without a semantic heading.
|
|
44
44
|
|
|
45
|
+
## Integration examples
|
|
46
|
+
|
|
47
|
+
See [accessibility integration examples](./accessibility.md) for paired anti-pattern and recommended implementations.
|
|
48
|
+
|
|
45
49
|
## API
|
|
46
50
|
|
|
47
51
|
### Properties
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# p-banner accessibility integration examples
|
|
2
|
+
|
|
3
|
+
## Integration examples
|
|
4
|
+
|
|
5
|
+
### Banner mounted only when shown
|
|
6
|
+
|
|
7
|
+
#### ❌ Anti-pattern
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
{hasError && (
|
|
11
|
+
<PBanner open heading="Error">
|
|
12
|
+
Something went wrong.
|
|
13
|
+
</PBanner>
|
|
14
|
+
)}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
#### ✅ Recommended
|
|
18
|
+
|
|
19
|
+
```tsx
|
|
20
|
+
{/* Pre-render the banner and update content when needed. */}
|
|
21
|
+
|
|
22
|
+
<PBanner id="form-banner" heading="Error" description="Check the highlighted fields and try again." state="error"></PBanner>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Error feedback without descriptive content
|
|
26
|
+
|
|
27
|
+
#### ❌ Anti-pattern
|
|
28
|
+
|
|
29
|
+
```tsx
|
|
30
|
+
<PBanner open={true} state="error" description="Error"></PBanner>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
#### ✅ Recommended
|
|
34
|
+
|
|
35
|
+
```tsx
|
|
36
|
+
<PBanner open={true} state="error" heading="Payment could not be processed" description="Check your card details or try another payment method."></PBanner>
|
|
37
|
+
```
|
|
@@ -43,6 +43,10 @@ The `Banner` component uses `role="status"` and `role="alert"` to announce **con
|
|
|
43
43
|
- **Do** return focus to the trigger or at a logical place after the banner is dismissed.
|
|
44
44
|
- **Don't** mount the entire banner only at the moment it should be announced.
|
|
45
45
|
|
|
46
|
+
## Integration examples
|
|
47
|
+
|
|
48
|
+
See [accessibility integration examples](./accessibility.md) for paired anti-pattern and recommended implementations.
|
|
49
|
+
|
|
46
50
|
## API
|
|
47
51
|
|
|
48
52
|
### Properties
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# p-button accessibility integration examples
|
|
2
|
+
|
|
3
|
+
## Integration examples
|
|
4
|
+
|
|
5
|
+
### ARIA on component host vs aria prop
|
|
6
|
+
|
|
7
|
+
#### ❌ Anti-pattern
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
<PButton aria-haspopup="dialog" aria-label="Open details of product XYZ">
|
|
11
|
+
Open details
|
|
12
|
+
</PButton>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
#### ✅ Recommended
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
<PButton aria={{'aria-haspopup': 'dialog', 'aria-label': 'Open details of product XYZ'}}>
|
|
19
|
+
Open details
|
|
20
|
+
</PButton>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Icon-only button without accessible name
|
|
24
|
+
|
|
25
|
+
#### ❌ Anti-pattern
|
|
26
|
+
|
|
27
|
+
```tsx
|
|
28
|
+
<PButton icon="plus"></PButton>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
#### ✅ Recommended
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
<PButton icon="plus" hideLabel={true}>
|
|
35
|
+
Add item XYZ to shopping cart
|
|
36
|
+
</PButton>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Vague button label without context
|
|
40
|
+
|
|
41
|
+
#### ❌ Anti-pattern
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
<PButton icon="plus">
|
|
45
|
+
Add
|
|
46
|
+
</PButton>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
#### ✅ Recommended
|
|
50
|
+
|
|
51
|
+
```tsx
|
|
52
|
+
<PButton icon="plus" aria={{'aria-label': 'Add item XYZ to shopping cart'}}>
|
|
53
|
+
Add
|
|
54
|
+
</PButton>
|
|
55
|
+
|
|
56
|
+
{/* or use descriptive visible text */}
|
|
57
|
+
|
|
58
|
+
<PButton icon="plus">
|
|
59
|
+
Add item XYZ to cart
|
|
60
|
+
</PButton>
|
|
61
|
+
```
|
|
@@ -84,6 +84,10 @@ If the text of a button does not clearly indicate what the button's behavior is,
|
|
|
84
84
|
- **Don't** add native `aria-*` attributes directly on the component host.
|
|
85
85
|
- **Don't** rely on short generic button labels like "Show" or "Add" without context.
|
|
86
86
|
|
|
87
|
+
## Integration examples
|
|
88
|
+
|
|
89
|
+
See [accessibility integration examples](./accessibility.md) for paired anti-pattern and recommended implementations.
|
|
90
|
+
|
|
87
91
|
## API
|
|
88
92
|
|
|
89
93
|
### Properties
|