diff --git a/lerna.json b/lerna.json
index 2799e64b9c..4a6325fdda 100644
--- a/lerna.json
+++ b/lerna.json
@@ -5,9 +5,7 @@
}
},
"npmClient": "yarn",
- "packages": [
- "packages/*"
- ],
+ "packages": ["packages/*"],
"ignoreChanges": [
"packages/stylelint-config-design-system/**",
"packages/eslint-config-design-system/**"
diff --git a/packages/design-system-docs/src/images/icon-dot-gov.svg b/packages/design-system-docs/src/images/icon-dot-gov.svg
deleted file mode 100644
index 27182dceba..0000000000
--- a/packages/design-system-docs/src/images/icon-dot-gov.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/packages/design-system-docs/src/images/icon-https.svg b/packages/design-system-docs/src/images/icon-https.svg
deleted file mode 100644
index 3f98a93f50..0000000000
--- a/packages/design-system-docs/src/images/icon-https.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/packages/design-system-docs/src/images/icon-lock.svg b/packages/design-system-docs/src/images/icon-lock.svg
deleted file mode 100644
index 8dd2e1d8ad..0000000000
--- a/packages/design-system-docs/src/images/icon-lock.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/packages/design-system-docs/src/images/us_flag_small.png b/packages/design-system-docs/src/images/us_flag_small.png
deleted file mode 100644
index 34b927b42c..0000000000
Binary files a/packages/design-system-docs/src/images/us_flag_small.png and /dev/null differ
diff --git a/packages/design-system-docs/src/pages/components/UsaBanner/UsaBanner.example.jsx b/packages/design-system-docs/src/pages/components/UsaBanner/UsaBanner.example.jsx
new file mode 100644
index 0000000000..c31dd67f9e
--- /dev/null
+++ b/packages/design-system-docs/src/pages/components/UsaBanner/UsaBanner.example.jsx
@@ -0,0 +1,13 @@
+import React from 'react';
+import ReactDOM from 'react-dom';
+import { UsaBanner } from '@cmsgov/design-system';
+
+ReactDOM.render(
+
+
English banner
+
+
Spanish banner
+
+
,
+ document.getElementById('js-example')
+);
diff --git a/packages/design-system-docs/src/pages/components/UsaBanner/_UsaBanner.docs.scss b/packages/design-system-docs/src/pages/components/UsaBanner/_UsaBanner.docs.scss
new file mode 100644
index 0000000000..e6d858ab47
--- /dev/null
+++ b/packages/design-system-docs/src/pages/components/UsaBanner/_UsaBanner.docs.scss
@@ -0,0 +1,45 @@
+/*
+USA banner
+
+@status Draft
+
+The USA banner identifies official websites of government organizations in the United States. It also helps visitors understand how to tell that a website is both official and secure.
+
+@uswds https://designsystem.digital.gov/components/banner/
+
+Markup: usabanner.example.html
+
+Style guide: components.usa-banner
+*/
+
+/*
+``
+
+@react-example UsaBanner.example.jsx
+
+@react-props UsaBanner.jsx
+
+Style guide: components.usa-banner.react
+*/
+
+/*
+---
+
+### When to use
+
+- To identify as an official government site. Most government sites should use the banner.
+
+### When to consider alternatives
+
+- If you don't use a .gov domain and HTTPS. The banner text identifies .gov domains and HTTPS as indicators that a website is an official government website. Use the banner only if your site uses both the proper TLD and HTTPS.
+- Any time it would be misleading. The banner should be used to reduce confusion. Avoid using the banner on any site meant only for testing or otherwise not meant to be identified as an official government website.
+
+### Usage
+
+- Use the provided text without customization. The banner is most effective as an identifier and a learning tool when its message is consistent across government websites.
+- Show the banner on every page. Use the banner at the top of every page of a site. It can be confusing or misleading if it appears on some pages and not others.
+- Avoid distraction. The banner appears on every page of your site. Choose background colors that fit with your site theme and avoid color combinations that draw excessive attention to the banner.
+- Keep the text up-to-date. Use the most current version of the banner.
+
+Style guide: components.usa-banner.guidance
+*/
diff --git a/packages/design-system-docs/src/pages/components/UsaBanner/usabanner.example.html b/packages/design-system-docs/src/pages/components/UsaBanner/usabanner.example.html
new file mode 100644
index 0000000000..0fee9bb998
--- /dev/null
+++ b/packages/design-system-docs/src/pages/components/UsaBanner/usabanner.example.html
@@ -0,0 +1,172 @@
+
English banner
+
+
+
+
+
+
+ An official website of the United States government
+ Here’s how you know
+
+
+
+
+
+
+
+
+ Official websites use .gov
+
+ A
+ .gov
+ website belongs to an official government organization in the United States.
+
+
+
+
+
+ Secure .gov websites use HTTPS
+
+ A
+
+ lock
+
+ (
+
+ ) or
+ https://
+ means you’ve safely connected to the .gov website. Share sensitive information only on
+ official, secure websites.
+
+
+
+
+
+
Spanish banner
+
+
+
+
+
+
+ Un sitio oficial del Gobierno de Estados Unidos
+ Así es como usted puede verificarlo
+
+
+
+
+
+
+
+
+ Los sitios web oficiales usan .gov
+
+ Un sitio web
+ .gov
+ pertenece a una organización oficial del Gobierno de Estados Unidos.
+
+
+
+
+
+ Los sitios web seguros .gov usan HTTPS
+
+ Un
+
+ candado
+
+ (
+
+ ) o
+ https://
+ significa que usted se conectó de forma segura a un sitio web .gov. Comparta información
+ sensible sólo en sitios web oficiales y seguros.
+
- An official website of the United States government
-
-
-
-
-
-
-
-
-
- Official websites use .gov
- A .gov website belongs to an official government organization
- in the United States.
-
-
-
-
-
- Secure .gov websites use HTTPS
- A lock ({' '}
-
-
- {' '}
- ) or https:// means you’ve safely connected to the .gov website.
- Share sensitive information only on official, secure websites.
-
+
+ );
+ }
+}
+
+UsaBanner.defaultProps = {
+ locale: 'en',
+};
+
+UsaBanner.propTypes = {
+ /**
+ * Additional classes to be added to the root `section` element
+ */
+ className: PropTypes.string,
+ /**
+ * A unique ID to be applied to the banner content. A unique ID will be generated if one isn't provided.
+ */
+ id: PropTypes.string,
+ /**
+ *
+ * The language the USA Banner will be presented in.
+ */
+ locale: PropTypes.oneOf(['en', 'es']),
+};
+
+export default UsaBanner;
diff --git a/packages/design-system/src/components/UsaBanner/UsaBanner.test.jsx b/packages/design-system/src/components/UsaBanner/UsaBanner.test.jsx
new file mode 100644
index 0000000000..24baf22de6
--- /dev/null
+++ b/packages/design-system/src/components/UsaBanner/UsaBanner.test.jsx
@@ -0,0 +1,53 @@
+import React from 'react';
+import UsaBanner from './UsaBanner';
+import renderer from 'react-test-renderer';
+import { shallow } from 'enzyme';
+
+function render(customProps = {}) {
+ const props = Object.assign({}, customProps);
+
+ return {
+ props: props,
+ wrapper: shallow(),
+ };
+}
+
+describe('UsaBanner', function () {
+ it('renders correctly', () => {
+ const tree = renderer.create().toJSON();
+
+ expect(tree).toMatchSnapshot();
+ });
+
+ it('applies Spanish translation', () => {
+ const tree = renderer.create().toJSON();
+
+ expect(tree).toMatchSnapshot();
+ });
+
+ it('applies additional class names to expanded banner', () => {
+ const { wrapper } = render();
+ const openButton = wrapper.find('.ds-c-usa-banner__button');
+ openButton.simulate('click');
+ const banner = wrapper.find('header');
+ expect(banner.hasClass('ds-c-usa-banner__header--expanded')).toBe(true);
+ expect(wrapper).toMatchSnapshot();
+ });
+
+ it('adds className to root element', () => {
+ const data = render({ className: 'bar' });
+
+ expect(data.wrapper.hasClass('bar')).toBe(true);
+ });
+
+ it('has a unique id', () => {
+ const banner1 = render({ id: 'banner_unique' });
+ const banner2 = render();
+ const button1 = banner1.wrapper.find('.ds-c-usa-banner__button').first();
+ const content1 = banner1.wrapper.find('.ds-c-usa-banner__content').first();
+ const content2 = banner2.wrapper.find('.ds-c-usa-banner__content').first();
+
+ expect(button1.prop('aria-controls')).toBe(content1.prop('id'));
+ expect(content1.prop('id')).not.toBe(content2.prop('id'));
+ });
+});
diff --git a/packages/design-system/src/components/UsaBanner/__snapshots__/UsaBanner.test.jsx.snap b/packages/design-system/src/components/UsaBanner/__snapshots__/UsaBanner.test.jsx.snap
new file mode 100644
index 0000000000..084e0d5a27
--- /dev/null
+++ b/packages/design-system/src/components/UsaBanner/__snapshots__/UsaBanner.test.jsx.snap
@@ -0,0 +1,520 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`UsaBanner applies Spanish translation 1`] = `
+
+
+
+
+
+
+
+ Un sitio oficial del Gobierno de Estados Unidos
+
+
+ Así es como usted puede verificarlo
+
+
+
+
+
+
+
+
+
+
+ Los sitios web oficiales usan .gov
+
+
+ Un sitio web
+
+
+ .gov
+
+
+ pertenece a una organización oficial del Gobierno de Estados Unidos.
+
+
+
+
+
+
+ Los sitios web seguros .gov usan HTTPS
+
+
+ Un
+
+
+ candado
+
+
+ (
+
+
+
+ )
+ o
+
+
+ https://
+
+
+ significa que usted se conectó de forma segura a un sitio web .gov. Comparta información sensible sólo en sitios web oficiales y seguros.
+
+
+
+
+
+`;
+
+exports[`UsaBanner applies additional class names to expanded banner 1`] = `
+
+
+
+
+
+
+
+ An official website of the United States government
+
+
+ Here’s how you know
+
+
+
+
+
+
+
+
+
+
+ Official websites use .gov
+
+
+ A
+
+
+ .gov
+
+
+ website belongs to an official government organization in the United States.
+
+
+
+
+
+
+ Secure .gov websites use HTTPS
+
+
+ A
+
+
+ lock
+
+
+ (
+
+
+
+ )
+ or
+
+
+ https://
+
+
+ means you’ve safely connected to the .gov website. Share sensitive information only on official, secure websites.
+