The form renderer is designed with accessibility in mind and is ready to integrate with NL Design System components.
The form components currently use semantic HTML with ARIA attributes for accessibility:
- Proper form labels with
forattributes - ARIA attributes (
aria-invalid,aria-describedby) - Semantic HTML elements
- Keyboard navigation support
- Screen reader friendly error messages
Utrecht is a popular implementation of the NL Design System architecture.
npm install @utrecht/component-library-css @utrecht/design-tokensThen modify the field components to use Utrecht classes:
import '@utrecht/component-library-css';
// In your component styles
.field-input {
@apply utrecht-textbox;
}npm install @amsterdam/design-system-reactYou can create custom CSS that follows NL Design System guidelines:
/* packages/renderer/src/styles/nl-design.css */
:root {
/* Colors from NL Design System */
--nl-color-primary: #01689b;
--nl-color-error: #d52b1e;
--nl-color-success: #39870c;
/* Typography */
--nl-font-family: 'RO Sans', sans-serif;
--nl-font-size-base: 1rem;
--nl-line-height: 1.5;
/* Spacing */
--nl-space-xs: 0.25rem;
--nl-space-sm: 0.5rem;
--nl-space-md: 1rem;
--nl-space-lg: 1.5rem;
}- ✅ Labels associated with inputs
- ✅ Required field indicators
- ✅ Help text with proper ARIA relationships
- ✅ Error messages announced to screen readers
- ✅ Focus management
- ✅ Keyboard navigation
- ✅ Semantic HTML structure
- ✅ Logical tab order
- ✅ Clear visual hierarchy
- ✅ Progress indicators for multi-step forms
- ✅ Real-time validation feedback
- ✅ Clear error messages
- ✅ Error summary for screen readers
- ✅ Visual error indicators
Decide which implementation to use:
- Utrecht (most mature)
- Amsterdam
- Custom implementation
npm install @utrecht/design-tokens
# or
npm install @amsterdam/design-tokensModify packages/renderer/src/components/base-field.ts to use design system classes and tokens.
Use tools like:
- NVDA or JAWS screen readers
- axe DevTools
- WAVE browser extension
- Lighthouse accessibility audit
Ensure compliance with:
- Color contrast ratios
- Focus indicators
- Keyboard navigation
- Screen reader compatibility
- Touch target sizes
cd packages/renderer
npm install @utrecht/component-library-css @utrecht/design-tokens// packages/renderer/src/index.ts
import '@utrecht/component-library-css/dist/index.css';// Example: text-field.ts
render() {
return html`
<div class="utrecht-form-field">
<label class="utrecht-form-label ${this.field.required ? 'utrecht-form-label--required' : ''}">
${this.field.label}
</label>
<input
class="utrecht-textbox ${this.hasErrors() ? 'utrecht-textbox--invalid' : ''}"
type="text"
.value="${this.value}"
?required="${this.field.required}"
@input="${this.handleInput}"
/>
${this.field.helpText ? html`
<p class="utrecht-form-field-description">${this.field.helpText}</p>
` : null}
${this.hasErrors() ? html`
<p class="utrecht-form-field-error-message">${this.renderErrors()}</p>
` : null}
</div>
`;
}- NL Design System Documentation
- Utrecht Storybook
- Amsterdam Design System
- WCAG 2.1 Guidelines
- Dutch Government Accessibility Requirements
- Test with keyboard only
- Test with screen reader (NVDA/JAWS)
- Test color contrast
- Test on mobile devices
- Validate HTML
- Run axe DevTools audit
- Test with form auto-fill
- Test error handling
- Test multi-step navigation
- Verify ARIA attributes