@cmsgov/medicare-site-package

A 'site package' on top of the CMSGOV Design System. Consists of SCSS overrides and React components for use on Medicare.gov websites.

Usage no npm install needed!

<script type="module">
  import cmsgovMedicareSitePackage from 'https://cdn.skypack.dev/@cmsgov/medicare-site-package';
</script>

README

A Site Package is a method for sharing common, site-specific, design and code resources between the various teams working on Medicare.gov. These resources are unique to Medicare.gov, and not generalized for inclusion in the Design System. It includes assets like design system overrides and site-specific components.

Usage

Installation

yarn add @cmsgov/medicare-site-package (or you can use npm install).

Once downloaded, you can edit any of the site package files in the src directory if you need to, though it's recommended to put your project's overrides in their own files so that any updates to the M.gov DSSP files can be updated via this process.

If you don't have any overrides you want to make, or you don't want to incorporate SASS/SCSS into your project, you can take the compiled file from /dist/index.css.

Building and Watching the Whole Package

If you haven't done so already, run yarn install to install all of the dependencies needed to build or watch.

Having done so, should you make any changes to your version that necessitate rebuilding it, you can rebuild via yarn build. This will generate new, production-ready versions of /dist/index.js and /dist/index.min.css and will also update the type definition file.

Building and Watching just the Sass/CSS

Having ensured you have a sass compiler installed, run yarn build-css to build a minified CSS version. The resultant file will be /dist/index.min.css. If you are in the midst of testing changes and/or want a non-minified version, running yarn test-css will output /dist/index.css.

Importing Sass

The source files included are written in Sass (.scss). You can add your node_modules directory to your Sass includePaths and import the file like below.

Note: The site package's Sass file imports the core, layout, and support design system Sass files as well, so the following is all you need to import to gain access to those resources:

@import "@cmsgov/medicare-site-package/src/index";

Building and Watching just the React Components

This can be done via yarn build-js and yarn watch-js respectively.

Importing React components

For components distributed through the site package, you can import them like this:

import { Header } from "@cmsgov/medicare-site-package";

Note: Ensure that you use a bundler with tree shaking enabled to avoid bundling unused components.

File structure

├── dist
│   ├── index.css                         Compiled CSS
│   ├── index.css.map                     Compiled CSS Source Map
│   ├── index.d.ts                        TypeScript Definitions File (only useful if you're using TypeScript)
│   ├── index.js                          Compiled JS (pre-minified)
│   ├── index.min.css                     Minified and Compiled CSS
│   └── index.min.css                     Minified and Compiled CSS Source Map
└── src
    ├── components                        React components specially-designed for Medicare.gov sites
    │   └── images                        Componentized images, such as Medicare.gov and DHHS logos
    ├── example-implementations           Example implementations of the components into things like headers and footers
    ├── index.scss                        Main Sass entry point with all imports
    └── scss
        ├── _buttons.scss                 Design system Button variable overrides
        ├── _color.scss                   Design system Color variable overrides
        ├── _font_vars.scss               Design system Font variable overrides
        ├── _fonts_and_typography.scss    Overrides for specific typography-related style rules
        ├── _overrides.scss               Collects `_fonts_and_typography.scss` and `_utilities.scss` into one import
        ├── _utilities.scss               Sass utilities not already-included in the design system
        ├── _variables.scss               Collects the variable overrides into one import
        └── components                    Styles for the Medicare.gov-specific React components

Design assets

You can find a the Medicare design system Sketch file and related fonts in the design-assets folder.


Why a site package?

Medicare.gov consists of multiple codebases maintained by different teams. Deploying a design system avoids the duplication of code and assets across codebases and working against the software development principle to keep things DRY. Having multiple codebases would naturally lead to differences and would cause inefficiencies and inconsistencies to creep across the user interface and user experience.

The Design System is one way we're addressing the issues mentioned above. However, the design system is meant to be used by many CMS (Centers for Medicare & Medicaid Services) websites, not just Medicare.gov. As a result, the resources within the design system are not tied to a particular website.

Goals

The primary goal of the Site Package is to reduce the amount of duplicate instances of Medicare.gov front-end components and design assets, and having a single source of truth which all teams can contribute to and use.

A secondary goal for the Site Package is for it to serve as an intermediate step in a component's journey to becoming a design system component. This gives the teams working on HealthCare.gov a space to share and iterate on components that at first appear to only have a use case on Medicare.gov.

Non-goals

  • The Site Package is not meant to be as robust or as large as the Design System. It should be as small as possible, and ideally all reusable components would be from the design system.
  • The Site Package is not meant to serve as a resource for best practices or accessibility guidelines — that's the responsibility of the design system.
  • The Medicare.gov Site Package is not meant to be a solution for other CMS websites.

Additional links

  • For more information on the original Design System, check out its GitHub page.