Skip to contentPorsche Design System
You are currently viewing an earlier release of the Porsche Design System.Switch to the latest Porsche Design System documentation.
SearchGitHub repository of Porsche Design SystemOpen settings sidebar
Pin Code Table of Contents Accessibility support Keyboard Key / stateFunctionTab, Shift-TabMoves focus to the next (or previous) focusable element.0–9Enters a digit in the focused input, replacing any existing digit, then moves focus to the next input.BackspaceClears the focused input. If it is already empty, clears the previous input and moves focus there.DeleteClears the focused input. If it is already empty, clears the next input and moves focus there.ArrowLeft, ArrowRightMoves focus to the previous or next input. Does not wrap.Home, EndMoves focus to the first or last input.EnterSubmits the surrounding form when native submit rules allow it. ARIA enhancements Internal ARIA that is managed by the component: ARIAUsagearia-label="STRING"Names each input by its position in the group, for example 1 of 4.aria-describedby="IDREF"References the status message when state and message are set.role="status", role="alert"When message and state or loading prop change, the status message is announced. Development considerations Disabled state In general, avoid using the disabled="true" state. Disabled elements are no longer focusable and may be missed by screen reader users. They can also confuse sighted users if the reason they are disabled is not made clear. Common do's and don'ts Do provide a clear label that describes what the code is for. Do use description to explain where users can find the code. Do use the component state/message API so validation and status changes are announced. Don't use hide-label without an accessible name. Integration examples
Missing field label❌ Anti-pattern
<p-pin-code name="verification" length="6"></p-pin-code>
✅ Recommended
<p-pin-code name="verification" length="6" label="Verification code" description="Enter the 6-digit code from your email."></p-pin-code>
Hidden label without accessible name❌ Anti-pattern
<p-pin-code name="verification" length="6" hide-label="true"></p-pin-code>
✅ Recommended
<p-pin-code name="verification" length="6" hide-label="true" label="Verification code"></p-pin-code>
Validation feedback via state and message API❌ Anti-pattern
<p-pin-code name="verification" label="Verification code" aria-invalid="true" message="Invalid"></p-pin-code>
✅ Recommended
<p-pin-code name="verification" length="6" label="Verification code" state="error" message="Enter the complete 6-digit verification code."></p-pin-code>
Tests Automated TechnologySupportAXE-Core (WCAG 2.2 AA, Best-Practice)✅High-Contrast Mode (light/dark)✅Text-Zoom (200%)✅ Manual TechnologySupportKeyboard✅Screen reader (VoiceOver, NVDA)✅
v4.8.0v2v1
Global settingsColor SchemeAll color tokens use the light-dark() CSS function. Set the theme via the CSS color-scheme property: light for light mode, dark for dark mode, or light dark to follow the user's system preference.LightDarkLight DarkDirectionThe dir global attribute in HTML changes the direction of text and other content within an element. It's most often used on the <html> tag to set the entire page's direction, which is crucial for supporting languages that are written from right to left (RTL), such as Arabic and Hebrew. For example, using <html dir="rtl"> makes the entire page display from right to left, adjusting the layout and text flow accordingly.LTR (left-to-right)RTL (right-to-left)Text ZoomTo ensure accessibility and comply with WCAG 2.2 AA standards, it is mandatory for web content to support text resizing up to at least 200% without loss of content or functionality. Using relative units like rem is a best practice for achieving this, as they allow the text to scale uniformly based on the user's browser settings.100%130%150%200%