diff --git a/src/stable/components/organisms/GovBanner/GovBanner.css b/src/stable/components/organisms/GovBanner/GovBanner.css
new file mode 100644
index 00000000..e9292fb9
--- /dev/null
+++ b/src/stable/components/organisms/GovBanner/GovBanner.css
@@ -0,0 +1,69 @@
+.banner-container {
+ width: 100%;
+ background-color: #004445;
+ color: white;
+ }
+
+ .banner-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 0.75rem 1rem;
+ }
+
+ .title-section {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ flex: 1;
+ }
+
+ .official-text {
+ display: flex;
+ gap: 0.25rem;
+ flex-wrap: wrap;
+ }
+
+ .know-text {
+ text-decoration: underline;
+ }
+
+ .chevron-container {
+ background: none;
+ border: none;
+ padding: 0.5rem;
+ color: inherit;
+ cursor: pointer;
+ }
+
+ .chevron-container svg {
+ transition: transform 0.2s ease;
+ }
+
+ .chevron-container[aria-expanded="true"] svg {
+ transform: rotate(180deg);
+ }
+
+ .content-container {
+ background-color: #f0f0f0;
+ padding: 1rem;
+ color: #333;
+ }
+
+ @media (max-width: 768px) {
+ .banner-header {
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 0.5rem;
+ }
+
+ .title-section {
+ flex-direction: column;
+ align-items: flex-start;
+ }
+
+ .chevron-container {
+ align-self: flex-end;
+ margin-top: -2rem;
+ }
+ }
\ No newline at end of file
diff --git a/src/stable/components/organisms/GovBanner/GovBanner.js b/src/stable/components/organisms/GovBanner/GovBanner.js
index 6bb41d3e..5a997b31 100644
--- a/src/stable/components/organisms/GovBanner/GovBanner.js
+++ b/src/stable/components/organisms/GovBanner/GovBanner.js
@@ -1,11 +1,15 @@
import styles from '!!raw-loader!./GovBanner.css';
-import varStyles from '!!raw-loader!../../../../shared/vairbale.css';
-import bootstrapStyles from '!!raw-loader!../../../../shared/themed-bootstrapStyles.css';
-
+import varStyles from '!!raw-loader!../../../../shared/variables.css';
+import bootstrapStyles from '!!raw-loader!../../../../shared/themed-bootstrap.css';
const template = document.createElement('template');
template.innerHTML = `
+
@@ -28,24 +34,41 @@ template.innerHTML = `
`;
class GovBanner extends HTMLElement {
- constructor(){
-
- // Always call super first in constructor
- super();
-
- // Create a shadow root
- const shadow = this.attachShadow({ mode: 'open' });
- shadow.appendChild(template.content.cloneNode(true));
-
- // Add Styles
- const bootStyles = document.createElement('style');
- bootStyles.textContent = bootstrapStyles;
- const variableStyles = document.createElement('style');
- variableStyles.textContent = varStyles;
- const itemStyles = document.createElement('style');
- itemStyles.textContent = styles;
- shadow.appendChild(bootStyles);
- shadow.appendChild(variableStyles);
- shadow.appendChild(itemStyles);
- }
-}
\ No newline at end of file
+
+ static observedAttributes = ['expanded'];
+
+ constructor() {
+ // Always call super first in constructor
+ super();
+
+ // Create a shadow root
+ const shadow = this.attachShadow({ mode: 'open' });
+ shadow.appendChild(template.content.cloneNode(true));
+
+ }
+ connectedCallback() {
+ this._setupListeners();
+ }
+
+ disconnectedCallback() {
+ const toggle = this.shadowRoot.querySelector('[part="toggle"]');
+ toggle.removeEventListener('click', this._handleToggle);
+ }
+
+
+ _setupListeners() {
+ const toggle = this.shadowRoot.querySelector('[part="toggle"]');
+ toggle.addEventListener('click', this._handleToggle.bind(this));
+ }
+
+ _handleToggle() {
+ const content = this.shadowRoot.querySelector('[part="content"]');
+ const toggle = this.shadowRoot.querySelector('[part="toggle"]');
+ const isExpanded = toggle.getAttribute('aria-expanded') === 'true';
+
+ toggle.setAttribute('aria-expanded', !isExpanded);
+ content.hidden = isExpanded;
+ }
+}
+
+export { GovBanner as default };
\ No newline at end of file
diff --git a/src/stable/components/organisms/GovBanner/GovBanner.scss b/src/stable/components/organisms/GovBanner/GovBanner.scss
index e69de29b..1f2997a4 100644
--- a/src/stable/components/organisms/GovBanner/GovBanner.scss
+++ b/src/stable/components/organisms/GovBanner/GovBanner.scss
@@ -0,0 +1 @@
+// Only Use For Complex Styling Tasks such as looping, functions, variables, etc
\ No newline at end of file
diff --git a/src/stable/stories/govbanner.stories.js b/src/stable/stories/govbanner.stories.js
index cfb77e48..d5b3e1a5 100644
--- a/src/stable/stories/govbanner.stories.js
+++ b/src/stable/stories/govbanner.stories.js
@@ -1,2 +1,36 @@
import '../components/organisms/GovBanner/cod-gov-banner';
-import { COMMON_STORY_ARGS } from '../../shared/js/storybook/args-utils';
\ No newline at end of file
+import { COMMON_STORY_ARGS } from '../../shared/js/storybook/args-utils';
+
+export default {
+ title: 'Organisms/GovBanner',
+ tags: ['autodocs']
+};
+
+export const Default = {
+ render: () => `
+
+ CITY OF DETROIT
+ An official website of the City of Detroit.
+ 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.
+
+
+
+
+
+ `
+};
\ No newline at end of file