U.S. Web Design System in React
Status: Accepted
Deciders: @sawyerh, @aligg, @lorenyu, @rocketnova
Date: 2022-12-05
Technical Story: #19
Context and Problem Statement
The U.S. Web Design System (USWDS) only provides HTML and CSS for its components. It includes a small bit of vanilla JS to add interactivity to some components like the date picker.
It's common for projects to write their own React components to output the USWDS HTML, to reduce the amount of boilerplate needed to use the USWDS components.
Previous research by Kalvin and Shannon discovered that Nava engineers and designers universally agreed that being able to use a React USWDS component library when starting new projects would be valuable.
Considered Options
Use the existing open source
react-uswds
libraryCreate our own React USWDS component library
Leave the responsibility to each project team
Decision Outcome
Add react-uswds
as a template dependency, making it available to all teams who use the template. The primary reasons are to avoid reinventing the wheel and because it's overall a well-built and maintained library.
Pros and Cons of the Options
Use the existing open source react-uswds
library
react-uswds
libraryreact-uswds
is maintained by Truss, another vendor in this space. A Storybook for it can be found here. Truss also maintains a USWDS Figma library for designers.
Pros
Includes React components for all USWDS components and patterns.
Fairly well maintained.
Intentionally does not include any non-USWDS components.
Supports USWDS v3 (latest version)
This was the recommended approach coming out of Kalvin and Shannon's research.
Cons
They pin the
@uswds/uswds
dependency version to a specific version, which means that a project cannot use a newer version of USWDS untilreact-uswds
updates it on their end. In practice, this could mean that a project may have delayed access to new component styles or CSS bug fixes that USWDS releases.Not necessarily a con, but just to call it out: We've only done a lightweight review of their technical implementation and hygiene — there's testing and linting, no reported a11y issues are open in GitHub or reported in Storybook, but we haven't done a comprehensive review of their code or a full accessibility audit. We're operating on trust in Truss's technical expertise, and an assumption that the outputted HTML markup is close to identical to what USWDS provides, so any a11y issues would likely be on USWDS's end.
Create our own React USWDS component library
Nava could create our own React USWDS component library, similar to react-uswds
.
Pros
We'd have full control over the technical approach and wouldn't have a dependency on another vendor to incorporate changes or release new versions.
Cons
Requires more time and effort than using an existing library. We'd have to build and maintain the library.
Reinventing the wheel. We can always fork
react-uswds
if it no longer meets our needs.
Leave the responsibility to each project team
This is the current approach. Each project team is responsible for creating their own React components for the USWDS components they need.
Pros
No additional work required from the Platform team.
Cons
Each project team has to spend time and effort building the components or making technical decisions related to how they'll integrate USWDS. Teams then have to write their own tests and fix their own bugs for these components. Overall a potential poor use of time and effort.
Links
Last updated