diff --git a/solution/backend/regulations/templates/regulations/about.html b/solution/backend/regulations/templates/regulations/about.html index c824e693b0..3384907fdf 100644 --- a/solution/backend/regulations/templates/regulations/about.html +++ b/solution/backend/regulations/templates/regulations/about.html @@ -1,248 +1,192 @@ {% extends "regulations/base.html" %} {% load static %} - -{% block title_prefix %}About This Tool | {% endblock %} - +{% block title_prefix %}About This Tool |{% endblock title_prefix %} {% block header %} {% include "regulations/partials/header.html" %} -{% endblock %} - +{% endblock header %} {% block body %} -
-
-

About This Tool

- -
-

- eRegulations organizes together regulations, subregulatory - guidance, and other related policy materials. Our team updates - content and functionality several times a week. -

-
- -
-

Contact

-

- Send questions and suggestions about this website - (including bug reports), or schedule a presentation or training - for your group: - contact the team. -

-

- Try new features and help make them better: - sign up for a session. -

-
- -
-

Automated Updates

- -
-
-
-

Regulation Text

-

- This tool displays regulation text from - eCFR. -

-

- When new rules (changes to regulations) become - effective, the Office of the Federal Register - incorporates them into eCFR - about two business days - after their effective date. -

-

- This tool automatically syncs with eCFR - once a day. -

-

- So, it can take up to three business days for - new rules to be incorporated into this tool. -

-

- Note: eCFR and this tool are - not official legal editions - of the CFR. -

+
+
+

About This Tool

+
+

+ eRegulations organizes together regulations, subregulatory + guidance, and other related policy materials. Our team updates + content and functionality several times a week. +

+
+
+

Contact

+

+ Send questions and suggestions about this website + (including bug reports), or schedule a presentation or training + for your group: + contact the team. +

+

+ Try new features and help make them better: + sign up for a session. +

+
+
+

Automated Updates

+
+
+
+

Regulation Text

+

+ This tool displays regulation text from + eCFR. +

+

+ When new rules (changes to regulations) become + effective, the Office of the Federal Register + incorporates them into eCFR + about two business days + after their effective date. +

+

+ This tool automatically syncs with eCFR + once a day. +

+

+ So, it can take up to three business days for + new rules to be incorporated into this tool. +

+

+ Note: eCFR and this tool are + not official legal editions + of the CFR. +

+
+
+ Diagram showing eCFR information going to this website +
-
- Diagram showing eCFR information going to this website +
+
+

Links to Federal Register Rules

+

+ Rules from 1994–present are pulled automatically + from the + Office of the Federal Register + once a day. +

+

+ Subject matter experts on our team use the + GovInfo Federal Register archive + to add links to selected rules before 1994 that may + be helpful for policy research. +

+
+
+ Screenshot of Rules with Preambles in the right sidebar of this site +
- -
-
-

Links to Federal Register Rules

-

- Rules from 1994–present are pulled automatically - from the - Office of the Federal Register - once a day. -

-

- Subject matter experts on our team use the - GovInfo Federal Register archive - to add links to selected rules before 1994 that may - be helpful for policy research. -

-
- -
- Screenshot of Rules with Preambles in the right sidebar of this site -
-
-
-
- -
-

Subject Matter Expert Updates

- -
-
-
-

Links to Additional Resources

-

- Resource links include subregulatory guidance and - implementation resources published by CMS, along - with related documents referenced from - Medicaid.gov, - CMS.gov, - and other official government sites as relevant. - Subject matter experts on our team curate and - update these links. -

-

- For example, when Medicaid.gov publishes a new piece - of subregulatory guidance in the - New & Notable Resource Center, we add a link to display in the sidebar of each - relevant section and subpart. -

-

- CMCS staff may also add internal documents useful for - policy research, only visible to logged-in staff. -

-
-
- Screenshot of Subregulatory Guidance in the right sidebar of this site +
+
+

Subject Matter Expert Updates

+
+
+
+

Links to Additional Resources

+

+ Resource links include subregulatory guidance and + implementation resources published by CMS, along + with related documents referenced from + Medicaid.gov, + CMS.gov, + and other official government sites as relevant. + Subject matter experts on our team curate and + update these links. +

+

+ For example, when Medicaid.gov publishes a new piece + of subregulatory guidance in the + New & Notable Resource Center, we add a link to display in the sidebar of each + relevant section and subpart. +

+

+ CMCS staff may also add internal documents useful for + policy research, only visible to logged-in staff. +

+
+
+ Screenshot of Subregulatory Guidance in the right sidebar of this site +
-
- -
-

Technical Details

-

- This tool has an - open source code repository - available for reuse by other government teams. -

-

- It uses APIs maintained by the Office of the Federal Register - and the Government Publishing Office: -

- -
-
-
-{% endblock %} + +
+

Technical Details

+

+ This tool has an + open source code repository + available for reuse by other government teams. +

+

+ It uses APIs maintained by the Office of the Federal Register + and the Government Publishing Office: +

+ +
+ + +{% endblock body %} diff --git a/solution/backend/regulations/templates/regulations/get_account_access.html b/solution/backend/regulations/templates/regulations/get_account_access.html new file mode 100644 index 0000000000..845169425d --- /dev/null +++ b/solution/backend/regulations/templates/regulations/get_account_access.html @@ -0,0 +1,98 @@ +{% extends "regulations/base.html" %} +{% load static %} +{% block title_prefix %} + Get Account Access | +{% endblock title_prefix %} +{% block header %} + {% include "regulations/partials/header.html" %} +{% endblock header %} +{% block body %} +
+
+

Get access to internal documents

+ +
+

+ CMCS staff with policy-related responsibilities may + request access to view and manage internal policy + reference documents in eRegulations. +

+

+ These internal documents are only available + to CMCS staff who sign into eRegulations through CMS + IDM. Before signing in for the first time, + CMCS staff need to request and be approved for an EUA + job code for eRegulations. +

+
+
+

Request access for CMCS staff

+
    +
  1. + Sign in to the CMS EUA website. +
  2. +
  3. + Click Modify My Job Codes. +
  4. +
  5. + Read the screen text, check the Confirmation (Required) checkbox, and click Next. +
  6. +
  7. + Scroll to the bottom of the Modify My Job Codes: My Job Codes screen and click Add a Job Code. +
  8. +
  9. + To find the job code, enter the following in the “Search for a group” box: +
      +
    1. + Select Job Code from the first drop-down menu. +
    2. +
    3. Select = from the middle drop-down menu.
    4. +
    5. Type or copy EREGS_EDITOR_PRD into the empty field.
    6. +
    7. Click Search to the right of the job code field.
    8. +
    +
  10. +
  11. + Click the checkbox to confirm the job code, then click Select to move to the next screen. +
  12. +
  13. + At this Modify My Job Codes: My Job Codes screen, do not click any checkboxes. Scroll to the bottom and click Next. +
  14. +
  15. + At the Modify My Job Codes: My Job Codes screen: +
      +
    1. + Enter a response in the Justification Reason field. Suggested language: I’m a CMCS staff member in [group and division name]. I am an eRegulations user and need access to internal policy repository documents for [reason]. +
    2. +
    3. + At the Is Job Code Temporary radio box, select No. +
    4. +
    +
  16. +
  17. + Click Finish. +
  18. +
  19. + Your job code request may take several days to process. When approved, you will receive an email with an update, and can then to eRegulations. If you do not receive this email within 2 weeks, please contact Stephanie Boyd (stephanie.boyd@cms.hhs.gov). +
  20. +
+
+
+
+{% endblock body %} diff --git a/solution/backend/regulations/templates/regulations/partials/header.html b/solution/backend/regulations/templates/regulations/partials/header.html index 799f9dec89..6c3039edc0 100644 --- a/solution/backend/regulations/templates/regulations/partials/header.html +++ b/solution/backend/regulations/templates/regulations/partials/header.html @@ -38,5 +38,10 @@ > {% endif %} + diff --git a/solution/backend/regulations/urls.py b/solution/backend/regulations/urls.py index 61ef842d85..17893fb84e 100644 --- a/solution/backend/regulations/urls.py +++ b/solution/backend/regulations/urls.py @@ -5,6 +5,7 @@ from regulations import converters from regulations.views.about import AboutView from regulations.views.cache import CacheView +from regulations.views.get_account_access import GetAccountAccessView from regulations.views.goto import GoToRedirectView from regulations.views.homepage import HomepageView from regulations.views.login import LoginView @@ -29,6 +30,7 @@ urlpatterns = [ path('', HomepageView.as_view(), name='homepage'), path('about/', AboutView.as_view(), name='about'), + path('get-account-access/', GetAccountAccessView.as_view(), name='get_account_access'), path('login/', LoginView.as_view(), name='custom_login'), path('//', RegulationLandingView.as_view(), name="regulation_landing_view"), path('//', RegulationLandingView.as_view(), name="reader_view"), diff --git a/solution/backend/regulations/views/get_account_access.py b/solution/backend/regulations/views/get_account_access.py new file mode 100644 index 0000000000..2fb22a94be --- /dev/null +++ b/solution/backend/regulations/views/get_account_access.py @@ -0,0 +1,6 @@ +from django.views.generic.base import TemplateView + + +class GetAccountAccessView(TemplateView): + + template_name = 'regulations/get_account_access.html' diff --git a/solution/ui/e2e/cypress/e2e/get-access-page.cy.js b/solution/ui/e2e/cypress/e2e/get-access-page.cy.js new file mode 100644 index 0000000000..591c4a285f --- /dev/null +++ b/solution/ui/e2e/cypress/e2e/get-access-page.cy.js @@ -0,0 +1,82 @@ +const username = Cypress.env("TEST_USERNAME"); +const password = Cypress.env("TEST_PASSWORD"); + +describe("Get Account Access page", { scrollBehavior: "center" }, () => { + beforeEach(() => { + cy.clearIndexedDB(); + cy.intercept("/**", (req) => { + req.headers["x-automated-test"] = Cypress.env("DEPLOYING"); + }); + }); + + it("checks a11y for Get Account Access page", () => { + cy.viewport("macbook-15"); + cy.visit("/get-account-access"); + cy.checkLinkRel(); + cy.injectAxe(); + cy.checkAccessibility(); + }); + + it("goes to the Get Account Access page from homepage", () => { + cy.viewport("macbook-15"); + cy.visit("/"); + cy.get("a[data-testid='get-account-access-narrow']") + .should("not.be.visible"); + cy.get("a[data-testid='get-account-access-wide']") + .should("be.visible") + .and("have.text", "Get Account Access") + .and("have.attr", "class") + .and("not.match", /active/); + cy.get("a[data-testid='get-account-access-wide']") + .click(); + cy.url().should("include", "/get-account-access/"); + cy.get("a[data-testid='get-account-access-wide']") + .should("be.visible") + .and("have.text", "Get Account Access") + .and("have.attr", "class") + .and("match", /active/); + cy.get("h1").contains("Get access to internal documents"); + }); + + it("goes to the Get Account Access page from a SPA page like /subjects", () => { + cy.viewport("macbook-15"); + cy.visit("/subjects"); + cy.get("a[data-testid='get-account-access-wide']") + .click(); + cy.url().should("include", "/get-account-access/"); + }); + + it("should have a shorter header label on narrow screens", () => { + cy.viewport("iphone-x"); + cy.visit("/"); + cy.get("a[data-testid='get-account-access-wide']") + .should("not.be.visible"); + cy.get("a[data-testid='get-account-access-narrow']") + .should("be.visible") + .and("have.text", "Get Access") + .click(); + cy.url().should("include", "/get-account-access/"); + cy.get("h1").contains("Get access to internal documents"); + }); + + it("should not show the header link when logged in", () => { + cy.viewport("macbook-15"); + cy.eregsLogin({ username, password, landingPage: "/" }); + cy.get("a[data-testid='get-account-access-wide']") + .should("not.exist"); + cy.get("a[data-testid='get-account-access-narrow']") + .should("not.exist"); + }); + + // if subjects page works, statutes and search do as well + it("goes to the Subjects page using header link", () => { + cy.viewport("macbook-15"); + cy.visit("/get-account-access/"); + cy.clickHeaderLink({ + page: "subjects", + label: "Research a Subject", + screen: "wide", + }); + cy.url().should("include", "/subjects"); + }); +}); diff --git a/solution/ui/e2e/cypress/e2e/title-tags.spec.cy.js b/solution/ui/e2e/cypress/e2e/title-tags.spec.cy.js index 592d18cb1a..9210a28c79 100644 --- a/solution/ui/e2e/cypress/e2e/title-tags.spec.cy.js +++ b/solution/ui/e2e/cypress/e2e/title-tags.spec.cy.js @@ -16,6 +16,18 @@ describe("Updated HTML Title Tags", { scrollBehavior: "center" }, () => { cy.title().should("eq", "Medicaid & CHIP eRegulations"); }); + it("About page title tags", () => { + cy.viewport("macbook-15"); + cy.visit("/about/"); + cy.title().should("eq", "About This Tool | Medicaid & CHIP eRegulations"); + }); + + it("Get Account Access page title tags", () => { + cy.viewport("macbook-15"); + cy.visit("/get-account-access/"); + cy.title().should("eq", "Get Account Access | Medicaid & CHIP eRegulations"); + }); + it("Statutes page title tags", () => { cy.viewport("macbook-15"); cy.visit("/statutes/"); diff --git a/solution/ui/regulations/composables/login.js b/solution/ui/regulations/composables/login.js index d9ae8083bf..3b312343ac 100644 --- a/solution/ui/regulations/composables/login.js +++ b/solution/ui/regulations/composables/login.js @@ -5,18 +5,21 @@ export default function useLoginRedirectUrl({ customLoginUrl, homeUrl, route, + directLink = undefined, }) { const loginUrl = ref(customLoginUrl); const setLoginUrl = () => { let basePath; - let fullPath; + let fullPath = "no-url-params"; let redirectUrl; if (route) { basePath = route.path.substring(1); fullPath = route.fullPath; redirectUrl = `${customLoginUrl}?next=${homeUrl}${basePath}`; + } else if (directLink) { + redirectUrl = `${customLoginUrl}?next=${directLink}`; } else { basePath = window.location.pathname; fullPath = window.location.href; diff --git a/solution/ui/regulations/css/scss/main.scss b/solution/ui/regulations/css/scss/main.scss index c63247b3df..98dcdbecdf 100644 --- a/solution/ui/regulations/css/scss/main.scss +++ b/solution/ui/regulations/css/scss/main.scss @@ -37,7 +37,7 @@ $eregs-image-path: "../images" !default; @import "partials/error_pages"; @import "partials/dropdown"; @import "partials/expanded_toc"; -@import "partials/about"; +@import "partials/info_pages"; @import "partials/login"; @import "partials/buttons_and_tooltip"; @import "partials/jump_to"; diff --git a/solution/ui/regulations/css/scss/partials/_header.scss b/solution/ui/regulations/css/scss/partials/_header.scss index e84637f9a2..89c7ca6df3 100644 --- a/solution/ui/regulations/css/scss/partials/_header.scss +++ b/solution/ui/regulations/css/scss/partials/_header.scss @@ -81,6 +81,22 @@ header { border-bottom: 2px solid $dark_gray; } + @mixin header__anchor--complete { + @include header__anchor--bold; + + color: $primary_link_color; + height: 24px; + line-height: 24px; + text-decoration: none; + + &:hover, + &:focus, + &.active { + @include header__anchor--active-bold; + padding: 0; + } + } + @mixin header--brand-type { font-size: var(--font-size-lg); line-height: 36px; @@ -103,6 +119,11 @@ header { &--first { height: 56px; + gap: 1rem; + + @include custom-min(calc($width-sm / 1px)) { + gap: 1.5rem; + } } &--second { @@ -134,6 +155,29 @@ header { flex: unset; } + .header__access-link { + &--wide { + @include custom-max(calc((calc($width-sm - 1px)) / 1px)) { + display: none; + } + } + + &--narrow { + @include custom-min(calc($width-sm / 1px)) { + display: none; + } + } + + &.header--links__anchor { + @include header__anchor--complete; + + &.active { + cursor: default; + pointer-events: none; + } + } + } + .header--links { display: flex; justify-content: flex-end; @@ -226,18 +270,7 @@ header { display: inline-block; .header--links__anchor { - @include header__anchor--bold; - - color: $primary_link_color; - line-height: 24px; - text-decoration: none; - - &:hover, - &:focus, - &.active { - @include header__anchor--active-bold; - padding: 0; - } + @include header__anchor--complete; } } } @@ -264,8 +297,10 @@ header { } &--expanded { - position: absolute; - left: -19px; + @include custom-max(calc((calc($eds-width-sm - 1px)) / 1px)) { + position: absolute; + left: -19px; + } } .form__button--toggle-mobile-search { @@ -379,19 +414,6 @@ header { .header--sign-in { height: $header_input_height_wide; - margin-left: 1rem; - - &:has(> a), - &:has(> span.disabled) { - margin-top: auto; - } - - &.active { - span.disabled { - @include header__anchor--active-bold; - padding: 0; - } - } span.disabled { @include header__anchor--bold; @@ -523,10 +545,27 @@ header { } } } + + &:has(> a), + &:has(> span.disabled) { + margin-top: auto; + } + + &.active { + span.disabled { + @include header__anchor--active-bold; + + cursor: default; + padding: 0; + } + } } - .header--search:has(.search__form--expanded) + .header--sign-in { - display: none; + .header--search:has(.search__form--expanded) ~ .header--sign-in, + .header--search:has(.search__form--expanded) ~ .header__access-link { + @include custom-max(calc((calc($eds-width-sm - 1px)) / 1px)) { + display: none; + } } } } diff --git a/solution/ui/regulations/css/scss/partials/_about.scss b/solution/ui/regulations/css/scss/partials/_info_pages.scss similarity index 65% rename from solution/ui/regulations/css/scss/partials/_about.scss rename to solution/ui/regulations/css/scss/partials/_info_pages.scss index 1907152f06..7dc6f70de9 100644 --- a/solution/ui/regulations/css/scss/partials/_about.scss +++ b/solution/ui/regulations/css/scss/partials/_info_pages.scss @@ -1,13 +1,36 @@ //----------------------------- -// About +// Informational page styles +// Static pages that provide information +// Ex: /about, /get-account-access //----------------------------- @import "../application_settings"; -main.about { +@mixin layout-and-spacing { display: block; margin: var(--spacer-3) auto var(--spacer-7); max-width: var(--text-max-width); +} + +main.get-account-access { + h1 { + margin-bottom: var(--spacer-2); + } + + aside.login-invite { + margin-top: var(--spacer-2); + margin-bottom: var(--spacer-2); + font-size: var(--font-size-sm); + } + + section.access-list { + margin-top: var(--spacer-2); + } +} + +main.about, +main.get-account-access { + @include layout-and-spacing; section { margin-top: var(--spacer-5); diff --git a/solution/ui/regulations/eregs-component-lib/src/components/index.js b/solution/ui/regulations/eregs-component-lib/src/components/index.js index 893b4f84c7..01300c7f27 100644 --- a/solution/ui/regulations/eregs-component-lib/src/components/index.js +++ b/solution/ui/regulations/eregs-component-lib/src/components/index.js @@ -41,6 +41,7 @@ export { default as TocSubchapter } from "./shared-components/TOC/TocSubchapter. export { default as TocTitle } from "./shared-components/TOC/TocTitle.vue"; // from Single Page App +export { default as AccessLink } from "../../../eregs-vite/src/components/AccessLink.vue"; export { default as HeaderComponent } from "../../../eregs-vite/src/components/header/HeaderComponent.vue"; export { default as HeaderLinks } from "../../../eregs-vite/src/components/header/HeaderLinks.vue"; export { default as HeaderSearch } from "../../../eregs-vite/src/components/header/HeaderSearch.vue"; diff --git a/solution/ui/regulations/eregs-component-lib/src/main.js b/solution/ui/regulations/eregs-component-lib/src/main.js index e4dd6eaa51..d2fd0f55a3 100644 --- a/solution/ui/regulations/eregs-component-lib/src/main.js +++ b/solution/ui/regulations/eregs-component-lib/src/main.js @@ -2,6 +2,7 @@ import { createApp } from "vue"; import vuetify from "./plugins/vuetify"; import { + AccessLink, ActionBtn, CollapseButton, Collapsible, @@ -202,6 +203,7 @@ function main() { const app = createApp({ components: { + AccessLink, ActionBtn, CollapseButton, Collapsible, diff --git a/solution/ui/regulations/eregs-vite/src/components/AccessLink.test.js b/solution/ui/regulations/eregs-vite/src/components/AccessLink.test.js new file mode 100644 index 0000000000..c921c45e25 --- /dev/null +++ b/solution/ui/regulations/eregs-vite/src/components/AccessLink.test.js @@ -0,0 +1,24 @@ +import { describe, it, expect } from "vitest"; +import { render, screen } from "@testing-library/vue"; + +import AccessLink from "./AccessLink.vue"; + +describe("Access Link", () => { + it("Renders a link with the correct base path and active class", async () => { + window.location = { pathname: "/test/base/get-account-access/" }; + + render(AccessLink, { + props: { + base: "/test/base/", + }, + }); + + const accessLinkEl = screen.getByTestId("get-account-access-narrow"); + + expect(accessLinkEl.href).toBe( + "http://mock-url.com/test/base/get-account-access/" + ); + + expect(accessLinkEl.classList).toContain("active"); + }); +}); diff --git a/solution/ui/regulations/eregs-vite/src/components/AccessLink.vue b/solution/ui/regulations/eregs-vite/src/components/AccessLink.vue new file mode 100644 index 0000000000..84d46e6a2f --- /dev/null +++ b/solution/ui/regulations/eregs-vite/src/components/AccessLink.vue @@ -0,0 +1,35 @@ + + + diff --git a/solution/ui/regulations/eregs-vite/src/components/SearchErrorMsg.test.js b/solution/ui/regulations/eregs-vite/src/components/SearchErrorMsg.test.js index 57542e4f7b..5733af555f 100644 --- a/solution/ui/regulations/eregs-vite/src/components/SearchErrorMsg.test.js +++ b/solution/ui/regulations/eregs-vite/src/components/SearchErrorMsg.test.js @@ -16,9 +16,7 @@ describe("Search Error Message", () => { await flushPromises(); - const errorTextEl = screen.getByTestId( - "error__msg" - ); + const errorTextEl = screen.getByTestId("error__msg"); expect(errorTextEl.textContent).toBe( "Sorry, we’re unable to display results for Search Query right now. Please try a different query, try again later, or let us know." @@ -38,9 +36,7 @@ describe("Search Error Message", () => { await flushPromises(); - const errorTextEl = screen.getByTestId( - "error__msg" - ); + const errorTextEl = screen.getByTestId("error__msg"); expect(errorTextEl.textContent).toBe( "Sorry, we’re unable to display results right now. Please try a different query, try again later, or let us know." @@ -59,9 +55,7 @@ describe("Search Error Message", () => { await flushPromises(); - const errorTextEl = screen.getByTestId( - "error__msg" - ); + const errorTextEl = screen.getByTestId("error__msg"); expect(errorTextEl.textContent).toBe( "Please try a different query, try again later, or let us know." diff --git a/solution/ui/regulations/eregs-vite/src/components/SignInLink.vue b/solution/ui/regulations/eregs-vite/src/components/SignInLink.vue index 25fda6ef8d..47ab66435c 100644 --- a/solution/ui/regulations/eregs-vite/src/components/SignInLink.vue +++ b/solution/ui/regulations/eregs-vite/src/components/SignInLink.vue @@ -27,12 +27,17 @@ const props = defineProps({ type: String, default: undefined, }, + directLink: { + type: String, + default: undefined, + }, }); const loginUrl = useLoginRedirectUrl({ customLoginUrl: props.customLoginUrl, homeUrl: props.homeUrl, route: props.route, + directLink: props.directLink, }); const linkClasses = computed(() => ({ diff --git a/solution/ui/regulations/eregs-vite/src/components/header/HeaderComponent.vue b/solution/ui/regulations/eregs-vite/src/components/header/HeaderComponent.vue index 160e175831..f2d2390abd 100644 --- a/solution/ui/regulations/eregs-vite/src/components/header/HeaderComponent.vue +++ b/solution/ui/regulations/eregs-vite/src/components/header/HeaderComponent.vue @@ -21,6 +21,7 @@ const isLoginPage = window.location.pathname.includes("login"); +
diff --git a/solution/ui/regulations/eregs-vite/src/components/header/HeaderLink.vue b/solution/ui/regulations/eregs-vite/src/components/header/HeaderLink.vue new file mode 100644 index 0000000000..3e27a658e9 --- /dev/null +++ b/solution/ui/regulations/eregs-vite/src/components/header/HeaderLink.vue @@ -0,0 +1,31 @@ + + + diff --git a/solution/ui/regulations/eregs-vite/src/components/header/HeaderLinks.vue b/solution/ui/regulations/eregs-vite/src/components/header/HeaderLinks.vue index bab4a54286..519a2b5cad 100644 --- a/solution/ui/regulations/eregs-vite/src/components/header/HeaderLinks.vue +++ b/solution/ui/regulations/eregs-vite/src/components/header/HeaderLinks.vue @@ -4,6 +4,7 @@ import useDropdownMenu from "composables/dropdownMenu"; import HeaderChevronUp from "../svgs/header-chevron-up.vue"; import HeaderChevronDown from "../svgs/header-chevron-down.vue"; import HeaderDropdownMenu from "./HeaderDropdownMenu.vue"; +import HeaderLink from "./HeaderLink.vue"; const props = defineProps({ statutesUrl: { @@ -40,15 +41,10 @@ const { menuExpanded, toggleClick, closeClick } = useDropdownMenu();