diff --git a/.prettierignore b/.prettierignore index 9b6142ef4..390d36ab9 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,5 +1,6 @@ node_modules/* dist/* +.cache/* tests/backstop/* .github/* coverage/* diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a289f578..612456811 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,71 @@ # NHS.UK frontend Changelog +## 8.0.0 - 28 September 2023 + +:boom: **Breaking changes** + +- Updated header and footer to use the new styles and functionality to match the live nhs.uk site ([PR 881](https://github.com/nhsuk/nhsuk-frontend/pull/881)) + +As well as changes to the styles, this added an example of a footer with it's links in columns, and removed the redundant example of "Header transactional". This also fixes the issue ([Issue 805](https://github.com/nhsuk/nhsuk-frontend/issues/805)). + +In the header variants, the menu toggle button has been replaced with a dropdown menu, that becomes visible when the screen width is below 768px (tablet width). The search toggle has been removed, and instead the search input automatically adjusts according to the screen width. + +Instead of having this: + +``` +// menu toggle + + + + Close menu + +``` + +You will now only need this: + +``` + + + +``` + :wrench: **Fixes** - Fix vertical alignment of primary card icon +- Change NHS Digital wording to NHS England +- Remove dead link in "Action link" example + +:new: **New features** + +- Added suffix and prefix examples to text input component ([PR 884](https://github.com/nhsuk/nhsuk-frontend/pull/884)) + +We added 4 new text input examples that allow users to add suffixes and prefixed to the input form. This was done by adding "suffix" and "prefix" as macro options. + +``` + input({ + "label": { + "text": "What is the cost per item, in pounds?" + }, + "prefix": "£", + "suffix": "per item", + "errorMessage": { + "text": "Enter a cost per item, in pounds" + } + }) +``` ## 7.1.0 - 21 August 2023 diff --git a/app/_templates/page.njk b/app/_templates/page.njk index c45ef7dce..949acd29c 100644 --- a/app/_templates/page.njk +++ b/app/_templates/page.njk @@ -6,9 +6,7 @@ {% from 'components/card/macro.njk' import card %} {% from 'components/contents-list/macro.njk' import contentsList %} {% from 'components/details/macro.njk' import details %} -{% from 'components/header/macro.njk' import header %} {% from 'components/hero/macro.njk' import hero %} -{% from 'components/footer/macro.njk' import footer %} {% from 'components/do-dont-list/macro.njk' import list %} {% from 'components/images/macro.njk' import image %} {% from 'components/inset-text/macro.njk' import insetText %} diff --git a/app/components/all.njk b/app/components/all.njk index 3679c6798..bc20b5915 100644 --- a/app/components/all.njk +++ b/app/components/all.njk @@ -917,7 +917,7 @@ "label": "Profile editor login" } ], - "secondaryLinks": [ + "metaLinks": [ { "URL": "https://www.nhs.uk/about-us/sitemap/", "label": "Sitemap" diff --git a/app/components/footer/footer-in-columns.njk b/app/components/footer/footer-in-columns.njk new file mode 100644 index 000000000..980ad1d26 --- /dev/null +++ b/app/components/footer/footer-in-columns.njk @@ -0,0 +1,103 @@ +{% set html_style = 'background-color: #f0f4f5;' %} +{% set title = 'Footer (columns)' %} +{% from 'components/footer/macro.njk' import footer %} +{% extends 'layout.njk' %} + +{% block body %} + + {{ footer({ + "links": [ + { + "URL": "#", + "label": "Home" + }, + { + "URL": "#", + "label": "Health A to Z" + }, + { + "URL": "#", + "label": "Live Well" + }, + { + "URL": "#", + "label": "Mental health" + }, + { + "URL": "#", + "label": "Care and support" + }, + { + "URL": "#", + "label": "Accessibility statement" + }, + { + "URL": "#", + "label": "Pregnancy" + }, + { + "URL": "#", + "label": "NHS services" + }, + { + "URL": "#", + "label": "Coronavirus (COVID-19)" + } + ], + "linksColumn2": [ + { + "URL": "#", + "label": "NHS App" + }, + { + "URL": "#", + "label": "Find my NHS number" + }, + { + "URL": "#", + "label": "Your health records" + }, + { + "URL": "#", + "label": "About the NHS" + }, + { + "URL": "#", + "label": "Healthcare abroad" + } + ], + "linksColumn3": [ + { + "URL": "#", + "label": "Contact us" + }, + { + "URL": "#", + "label": "Other NHS websites" + }, + { + "URL": "#", + "label": "Profile editor login" + } + ], + "metaLinks": [ + { + "URL": "#", + "label": "About us" + }, + { + "URL": "#", + "label": "Accessibility statement" + }, + { + "URL": "#", + "label": "Our policies" + }, + { + "URL": "#", + "label": "Cookies" + } + ] + })}} + +{% endblock %} diff --git a/app/components/footer/index.njk b/app/components/footer/index.njk index 43b7cdcaa..f861b414e 100644 --- a/app/components/footer/index.njk +++ b/app/components/footer/index.njk @@ -1,5 +1,5 @@ {% set html_style = 'background-color: #f0f4f5;' %} -{% set title = 'Footer' %} +{% set title = 'Footer (default)' %} {% from 'components/footer/macro.njk' import footer %} {% extends 'layout.njk' %} diff --git a/app/components/header/header-logo.njk b/app/components/header/header-logo.njk index ad5ce4d1d..800210b56 100644 --- a/app/components/header/header-logo.njk +++ b/app/components/header/header-logo.njk @@ -1,5 +1,5 @@ {% set html_style = 'background-color: #f0f4f5;' %} -{% set title = 'Header' %} +{% set title = 'Header with logo only' %} {% from 'components/header/macro.njk' import header %} {% extends 'layout.njk' %} diff --git a/app/components/header/header-service-name-with-nav.njk b/app/components/header/header-service-name-with-nav.njk index 4872953b6..538a72508 100644 --- a/app/components/header/header-service-name-with-nav.njk +++ b/app/components/header/header-service-name-with-nav.njk @@ -1,5 +1,5 @@ {% set html_style = 'background-color: #f0f4f5;' %} -{% set title = 'Header transactional with service name' %} +{% set title = 'Header with a service name, search and navigation' %} {% from 'components/header/macro.njk' import header %} {% extends 'layout.njk' %} @@ -14,7 +14,7 @@ "primaryLinks": [ { "url" : "#", - "label" : "NHS service standard" + "label" : "Standards and technology" }, { 'url' : '#', @@ -28,6 +28,10 @@ 'url' : '#', 'label' : 'Accessibility' }, + { + 'url' : '#', + 'label' : 'Design principles' + }, { 'url' : '#', 'label' : 'Community and contribution' diff --git a/app/components/header/header-service-name.njk b/app/components/header/header-service-name.njk index a0c7c3ec4..8c5149e50 100644 --- a/app/components/header/header-service-name.njk +++ b/app/components/header/header-service-name.njk @@ -1,5 +1,5 @@ {% set html_style = 'background-color: #f0f4f5;' %} -{% set title = 'Header transactional with service name' %} +{% set title = 'Header with service name' %} {% from 'components/header/macro.njk' import header %} {% extends 'layout.njk' %} diff --git a/app/components/header/header-transactional-service-name.njk b/app/components/header/header-transactional-service-name.njk index 92edfab49..13038875d 100644 --- a/app/components/header/header-transactional-service-name.njk +++ b/app/components/header/header-transactional-service-name.njk @@ -7,7 +7,7 @@ {{ header({ "transactionalService": { - "name": "Register with a GP" + "name": "Find your NHS number" }, "showNav": "false", "showSearch": "false" diff --git a/app/components/header/header-transactional.njk b/app/components/header/header-transactional.njk deleted file mode 100644 index 9dad44536..000000000 --- a/app/components/header/header-transactional.njk +++ /dev/null @@ -1,15 +0,0 @@ -{% set html_style = 'background-color: #f0f4f5;' %} -{% set title = 'Header transactional' %} -{% from 'components/header/macro.njk' import header %} -{% extends 'layout.njk' %} - -{% block body %} - - {{ header({ - "transactional": "true", - "showNav": "false", - "showSearch": "false" - }) - }} - -{% endblock %} diff --git a/app/components/header/index.njk b/app/components/header/index.njk index 5f9d87dc0..3754df755 100644 --- a/app/components/header/index.njk +++ b/app/components/header/index.njk @@ -1,5 +1,5 @@ {% set html_style = 'background-color: #f0f4f5;' %} -{% set title = 'Header' %} +{% set title = 'Header (default)' %} {% from 'components/header/macro.njk' import header %} {% extends 'layout.njk' %} diff --git a/app/pages/about.njk b/app/pages/about.njk index f68bdb90a..a9e51a38f 100644 --- a/app/pages/about.njk +++ b/app/pages/about.njk @@ -28,8 +28,8 @@

Please see our contributing guidelines on how to set up the project locally and contribute changes to NHS.UK frontend.

Get in touch

-

NHS.UK frontend is actively maintained by a team at NHS England, you can email us or get in touch on the NHS digital service manual Slack workspace. - +

NHS.UK frontend is actively maintained by a team at NHS England, you can email us or get in touch on the NHS digital service manual Slack workspace.

+ {% endblock %} diff --git a/app/pages/examples.njk b/app/pages/examples.njk index 5af86285f..c8093d5c1 100644 --- a/app/pages/examples.njk +++ b/app/pages/examples.njk @@ -70,14 +70,14 @@
  • Fieldset
  • Fieldset as page heading
  • Fieldset with inputs
  • -
  • Footer
  • -
  • Header
  • +
  • Footer (default)
  • +
  • Footer (columns)
  • +
  • Header (default)
  • Header with navigation
  • Header with search
  • Header with logo only
  • Header with a service name
  • Header with a service name, search and navigation
  • -
  • Header transactional
  • Header transactional with service name
  • Header organisational
  • Header organisational with white header
  • @@ -128,3 +128,32 @@
  • Warning callout with custom heading
  • {% endblock %} + +{% block footer %} + + {{ footer({ + "links": [ + { + "URL": baseUrl, + "label": "NHS.UK frontend" + }, + { + "URL": baseUrl + "pages/install.html", + "label": "Install" + }, + { + "URL": baseUrl + "pages/examples.html", + "label": "Examples" + }, + { + "URL": baseUrl + "pages/about.html", + "label": "About" + }, + { + "URL": "https://github.com/nhsuk/nhsuk-frontend", + "label": "GitHub" + } + ] + })}} + +{% endblock %} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index c85625d94..0b303daf7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nhsuk-frontend", - "version": "7.0.0", + "version": "7.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "nhsuk-frontend", - "version": "7.0.0", + "version": "7.1.0", "license": "MIT", "devDependencies": { "@babel/core": "^7.18.6", @@ -36,6 +36,7 @@ "minimist": "^1.2.6", "nunjucks": "^3.2.3", "prettier": "^2.7.1", + "puppeteer": "^18.1.0", "sass": "^1.53.0", "start-server-and-test": "^1.14.0", "stylelint": "^13.13.1", @@ -358,9 +359,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, "engines": { "node": ">=6.9.0" @@ -1017,12 +1018,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -2740,13 +2741,13 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@mirzazeyrek/node-resemble-js": { @@ -2899,9 +2900,9 @@ } }, "node_modules/@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", + "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", "dev": true, "dependencies": { "@babel/parser": "^7.20.7", @@ -2912,18 +2913,18 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", + "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", + "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -2931,12 +2932,12 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", + "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", "dev": true, "dependencies": { - "@babel/types": "^7.3.0" + "@babel/types": "^7.20.7" } }, "node_modules/@types/eslint": { @@ -2969,9 +2970,9 @@ "peer": true }, "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz", + "integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==", "dev": true, "dependencies": { "@types/node": "*" @@ -3065,9 +3066,9 @@ "dev": true }, "node_modules/@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", "dev": true }, "node_modules/@types/stack-utils": { @@ -3104,9 +3105,9 @@ "dev": true }, "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.1.tgz", + "integrity": "sha512-CHzgNU3qYBnp/O4S3yv2tXPlvMTq0YWSTVg2/JYLqWZGHwwgJGAwd00poay/11asPq8wLFwHzubyInqHIFmmiw==", "dev": true, "optional": true, "dependencies": { @@ -4163,9 +4164,9 @@ } }, "node_modules/backstopjs": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/backstopjs/-/backstopjs-6.1.4.tgz", - "integrity": "sha512-EachXZeA2JQPgivnt2Qqdyt20Jix6G8e6IoO4AG3hHTB5YdJQnfazYx7Qs5hW0GYnx44M0nuTxSHQGbrPwpMBw==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/backstopjs/-/backstopjs-6.2.2.tgz", + "integrity": "sha512-Uy+y7FR+4jjhg+lxO2Sx9ag7D08HII9p5bfTpLD6/t2wkSk38pTTFbb7eeRvhuUNoPAgEk4o1urYrtPq4G9jyg==", "dev": true, "dependencies": { "@mirzazeyrek/node-resemble-js": "^1.2.1", @@ -4181,9 +4182,9 @@ "os": "^0.1.2", "p-map": "^4.0.0", "path": "^0.12.7", - "playwright": "^1.23.4", - "portfinder": "^1.0.28", - "puppeteer": "^15.4.0", + "playwright": "^1.32.1", + "portfinder": "^1.0.32", + "puppeteer": "^19.7.0", "super-simple-web-server": "^1.1.3", "temp": "^0.9.4" }, @@ -4191,6 +4192,36 @@ "backstop": "cli/index.js" } }, + "node_modules/backstopjs/node_modules/@puppeteer/browsers": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", + "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", + "dev": true, + "dependencies": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=14.1.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/backstopjs/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -4222,6 +4253,18 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/backstopjs/node_modules/chromium-bidi": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", + "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", + "dev": true, + "dependencies": { + "mitt": "3.0.0" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, "node_modules/backstopjs/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -4240,6 +4283,30 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/backstopjs/node_modules/cosmiconfig": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/backstopjs/node_modules/devtools-protocol": { + "version": "0.0.1107588", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", + "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", + "dev": true + }, "node_modules/backstopjs/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4249,6 +4316,57 @@ "node": ">=8" } }, + "node_modules/backstopjs/node_modules/mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", + "dev": true + }, + "node_modules/backstopjs/node_modules/puppeteer": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", + "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@puppeteer/browsers": "0.5.0", + "cosmiconfig": "8.1.3", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "puppeteer-core": "19.11.1" + } + }, + "node_modules/backstopjs/node_modules/puppeteer-core": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", + "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", + "dev": true, + "dependencies": { + "@puppeteer/browsers": "0.5.0", + "chromium-bidi": "0.4.7", + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1107588", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.13.0" + }, + "engines": { + "node": ">=14.14.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/backstopjs/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -4261,6 +4379,27 @@ "node": ">=8" } }, + "node_modules/backstopjs/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/bail": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", @@ -4373,9 +4512,9 @@ } }, "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz", - "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { "inherits": "^2.0.3", @@ -4939,9 +5078,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, "node_modules/class-utils": { @@ -5187,9 +5326,9 @@ } }, "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", "dev": true }, "node_modules/collection-map": { @@ -5820,9 +5959,9 @@ "dev": true }, "node_modules/deepmerge": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", - "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, "engines": { "node": ">=0.10.0" @@ -5921,9 +6060,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1019158", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1019158.tgz", - "integrity": "sha512-wvq+KscQ7/6spEV7czhnZc9RM/woz1AY+/Vpd8/h2HFMwJSdTliu7f/yr1A6vDdJfKICZsShqsYpEQbdhg8AFQ==", + "version": "0.0.1045489", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1045489.tgz", + "integrity": "sha512-D+PTmWulkuQW4D1NTiCRCFxF7pQPn0hgp4YyX4wAQ6xYXKOadSWPR3ENGDQ47MW/Ewc9v2rpC/UEEGahgBYpSQ==", "dev": true }, "node_modules/diff": { @@ -6372,15 +6511,14 @@ } }, "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" + "esutils": "^2.0.2" }, "bin": { "escodegen": "bin/escodegen.js", @@ -6402,57 +6540,6 @@ "node": ">=4.0" } }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/eslint": { "version": "8.35.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.35.0.tgz", @@ -10547,17 +10634,17 @@ } }, "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/istanbul-lib-report/node_modules/has-flag": { @@ -10569,6 +10656,48 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-report/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -10581,6 +10710,12 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-report/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", @@ -10596,9 +10731,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -10987,6 +11122,23 @@ "node": ">=0.12.0" } }, + "node_modules/jest-config/node_modules/jest-environment-node": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", + "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-config/node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -11344,89 +11496,73 @@ } }, "node_modules/jest-environment-node": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", - "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.4.tgz", + "integrity": "sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==", "dev": true, "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/environment": "^29.6.4", + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-environment-puppeteer": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/jest-environment-puppeteer/-/jest-environment-puppeteer-7.0.1.tgz", - "integrity": "sha512-ZfNK2jfY4Ru7WQW9aq/WStkyf6I74Y141j1FTGiZtKfj6xh058N+vtWnt7o1yw3SOumrIAL9lMdKWZxWZRVHuA==", - "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "cwd": "^0.10.0", - "jest-dev-server": "^7.0.1", - "jest-environment-node": "^29.4.1", - "merge-deep": "^3.0.3" - }, - "engines": { - "node": ">=14.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-puppeteer/node_modules/@jest/environment": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.3.tgz", - "integrity": "sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==", + "node_modules/jest-environment-node/node_modules/@jest/environment": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.4.tgz", + "integrity": "sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==", "dev": true, "dependencies": { - "@jest/fake-timers": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.4.3" + "jest-mock": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-puppeteer/node_modules/@jest/fake-timers": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.3.tgz", - "integrity": "sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==", + "node_modules/jest-environment-node/node_modules/@jest/fake-timers": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.4.tgz", + "integrity": "sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==", "dev": true, "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.4.3", - "jest-mock": "^29.4.3", - "jest-util": "^29.4.3" + "jest-message-util": "^29.6.3", + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-puppeteer/node_modules/@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "node_modules/jest-environment-node/node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "dependencies": { - "@sinclair/typebox": "^0.25.16" + "@sinclair/typebox": "^0.27.8" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-puppeteer/node_modules/@jest/types": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", - "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", + "node_modules/jest-environment-node/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -11437,31 +11573,31 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-puppeteer/node_modules/@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", + "node_modules/jest-environment-node/node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true }, - "node_modules/jest-environment-puppeteer/node_modules/@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "node_modules/jest-environment-node/node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", "dev": true, "dependencies": { "type-detect": "4.0.8" } }, - "node_modules/jest-environment-puppeteer/node_modules/@sinonjs/fake-timers": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", - "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", + "node_modules/jest-environment-node/node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, "dependencies": { - "@sinonjs/commons": "^2.0.0" + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/jest-environment-puppeteer/node_modules/ansi-styles": { + "node_modules/jest-environment-node/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -11476,7 +11612,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-environment-puppeteer/node_modules/braces": { + "node_modules/jest-environment-node/node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", @@ -11488,7 +11624,7 @@ "node": ">=8" } }, - "node_modules/jest-environment-puppeteer/node_modules/chalk": { + "node_modules/jest-environment-node/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -11504,7 +11640,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-environment-puppeteer/node_modules/color-convert": { + "node_modules/jest-environment-node/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -11516,13 +11652,13 @@ "node": ">=7.0.0" } }, - "node_modules/jest-environment-puppeteer/node_modules/color-name": { + "node_modules/jest-environment-node/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/jest-environment-puppeteer/node_modules/fill-range": { + "node_modules/jest-environment-node/node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", @@ -11534,7 +11670,7 @@ "node": ">=8" } }, - "node_modules/jest-environment-puppeteer/node_modules/has-flag": { + "node_modules/jest-environment-node/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -11543,7 +11679,7 @@ "node": ">=8" } }, - "node_modules/jest-environment-puppeteer/node_modules/is-number": { + "node_modules/jest-environment-node/node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", @@ -11552,36 +11688,19 @@ "node": ">=0.12.0" } }, - "node_modules/jest-environment-puppeteer/node_modules/jest-environment-node": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.3.tgz", - "integrity": "sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.4.3", - "@jest/fake-timers": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/node": "*", - "jest-mock": "^29.4.3", - "jest-util": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-puppeteer/node_modules/jest-message-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz", - "integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==", + "node_modules/jest-environment-node/node_modules/jest-message-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", + "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.4.3", + "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.4.3", + "pretty-format": "^29.6.3", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -11589,27 +11708,27 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-puppeteer/node_modules/jest-mock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.3.tgz", - "integrity": "sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==", + "node_modules/jest-environment-node/node_modules/jest-mock": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz", + "integrity": "sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==", "dev": true, "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-util": "^29.4.3" + "jest-util": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-puppeteer/node_modules/jest-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz", - "integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==", + "node_modules/jest-environment-node/node_modules/jest-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", + "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", "dev": true, "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -11620,7 +11739,7 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-puppeteer/node_modules/micromatch": { + "node_modules/jest-environment-node/node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", @@ -11633,13 +11752,13 @@ "node": ">=8.6" } }, - "node_modules/jest-environment-puppeteer/node_modules/pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", + "node_modules/jest-environment-node/node_modules/pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -11647,7 +11766,7 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-puppeteer/node_modules/pretty-format/node_modules/ansi-styles": { + "node_modules/jest-environment-node/node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", @@ -11659,7 +11778,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-environment-puppeteer/node_modules/supports-color": { + "node_modules/jest-environment-node/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -11671,7 +11790,7 @@ "node": ">=8" } }, - "node_modules/jest-environment-puppeteer/node_modules/to-regex-range": { + "node_modules/jest-environment-node/node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", @@ -11683,6 +11802,92 @@ "node": ">=8.0" } }, + "node_modules/jest-environment-puppeteer": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/jest-environment-puppeteer/-/jest-environment-puppeteer-7.0.1.tgz", + "integrity": "sha512-ZfNK2jfY4Ru7WQW9aq/WStkyf6I74Y141j1FTGiZtKfj6xh058N+vtWnt7o1yw3SOumrIAL9lMdKWZxWZRVHuA==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "cwd": "^0.10.0", + "jest-dev-server": "^7.0.1", + "jest-environment-node": "^29.4.1", + "merge-deep": "^3.0.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/jest-environment-puppeteer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-environment-puppeteer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-environment-puppeteer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-environment-puppeteer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-environment-puppeteer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-puppeteer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-get-type": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", @@ -12266,6 +12471,23 @@ "node": ">=8" } }, + "node_modules/jest-runner/node_modules/jest-environment-node": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", + "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-runner/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -12486,9 +12708,9 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -14138,9 +14360,9 @@ "dev": true }, "node_modules/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, "dependencies": { "whatwg-url": "^5.0.0" @@ -15028,9 +15250,9 @@ } }, "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, "engines": { "node": ">= 6" @@ -15122,31 +15344,33 @@ } }, "node_modules/playwright": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.31.1.tgz", - "integrity": "sha512-zKJabsIA2rvOwJ12lGTqWv4HVJzlfw2JtUvO4hAr7J8UXQZ1qEPpX20E1vcz/9fotnTkwgqp3CVdIBwptBN3Fg==", + "version": "1.38.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.38.1.tgz", + "integrity": "sha512-oRMSJmZrOu1FP5iu3UrCx8JEFRIMxLDM0c/3o4bpzU5Tz97BypefWf7TuTNPWeCe279TPal5RtPPZ+9lW/Qkow==", "dev": true, - "hasInstallScript": true, "dependencies": { - "playwright-core": "1.31.1" + "playwright-core": "1.38.1" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=14" + "node": ">=16" + }, + "optionalDependencies": { + "fsevents": "2.3.2" } }, "node_modules/playwright-core": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.31.1.tgz", - "integrity": "sha512-JTyX4kV3/LXsvpHkLzL2I36aCdml4zeE35x+G5aPc4bkLsiRiQshU5lWeVpHFAuC8xAcbI6FDcw/8z3q2xtJSQ==", + "version": "1.38.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.38.1.tgz", + "integrity": "sha512-tQqNFUKa3OfMf4b2jQ7aGLB8o9bS3bOY0yMEtldtC2+spf8QXG9zvXLTXUeRsoNuxEYMgLYR+NXfAa1rjKRcrg==", "dev": true, "bin": { - "playwright": "cli.js" + "playwright-core": "cli.js" }, "engines": { - "node": ">=14" + "node": ">=16" } }, "node_modules/plugin-error": { @@ -15598,34 +15822,33 @@ } }, "node_modules/puppeteer": { - "version": "15.5.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-15.5.0.tgz", - "integrity": "sha512-+vZPU8iBSdCx1Kn5hHas80fyo0TiVyMeqLGv/1dygX2HKhAZjO9YThadbRTCoTYq0yWw+w/CysldPsEekDtjDQ==", - "deprecated": "< 19.2.0 is no longer supported", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-18.1.0.tgz", + "integrity": "sha512-2RCVWIF+pZOSfksWlQU0Hh6CeUT5NYt66CDDgRyuReu6EvBAk1y+/Q7DuzYNvGChSecGMb7QPN0hkxAa3guAog==", + "deprecated": "< 19.4.0 is no longer supported", "dev": true, "hasInstallScript": true, "dependencies": { "cross-fetch": "3.1.5", "debug": "4.3.4", - "devtools-protocol": "0.0.1019158", + "devtools-protocol": "0.0.1045489", "extract-zip": "2.0.1", "https-proxy-agent": "5.0.1", - "pkg-dir": "4.2.0", "progress": "2.0.3", "proxy-from-env": "1.1.0", "rimraf": "3.0.2", "tar-fs": "2.1.1", "unbzip2-stream": "1.4.3", - "ws": "8.8.0" + "ws": "8.9.0" }, "engines": { "node": ">=14.1.0" } }, "node_modules/puppeteer/node_modules/ws": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz", - "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", + "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", "dev": true, "engines": { "node": ">=10.0.0" @@ -18170,9 +18393,9 @@ } }, "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz", - "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { "inherits": "^2.0.3", @@ -19787,9 +20010,9 @@ } }, "node_modules/ws": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz", - "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "dev": true, "engines": { "node": ">=10.0.0" @@ -20183,9 +20406,9 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true }, "@babel/helper-remap-async-to-generator": { @@ -20632,12 +20855,12 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-arrow-functions": { @@ -21889,13 +22112,13 @@ "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "@mirzazeyrek/node-resemble-js": { @@ -22020,9 +22243,9 @@ "dev": true }, "@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", + "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", "dev": true, "requires": { "@babel/parser": "^7.20.7", @@ -22033,18 +22256,18 @@ } }, "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", + "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", "dev": true, "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", + "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -22052,12 +22275,12 @@ } }, "@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", + "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", "dev": true, "requires": { - "@babel/types": "^7.3.0" + "@babel/types": "^7.20.7" } }, "@types/eslint": { @@ -22090,9 +22313,9 @@ "peer": true }, "@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz", + "integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==", "dev": true, "requires": { "@types/node": "*" @@ -22186,9 +22409,9 @@ "dev": true }, "@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", "dev": true }, "@types/stack-utils": { @@ -22225,9 +22448,9 @@ "dev": true }, "@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.1.tgz", + "integrity": "sha512-CHzgNU3qYBnp/O4S3yv2tXPlvMTq0YWSTVg2/JYLqWZGHwwgJGAwd00poay/11asPq8wLFwHzubyInqHIFmmiw==", "dev": true, "optional": true, "requires": { @@ -23068,9 +23291,9 @@ } }, "backstopjs": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/backstopjs/-/backstopjs-6.1.4.tgz", - "integrity": "sha512-EachXZeA2JQPgivnt2Qqdyt20Jix6G8e6IoO4AG3hHTB5YdJQnfazYx7Qs5hW0GYnx44M0nuTxSHQGbrPwpMBw==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/backstopjs/-/backstopjs-6.2.2.tgz", + "integrity": "sha512-Uy+y7FR+4jjhg+lxO2Sx9ag7D08HII9p5bfTpLD6/t2wkSk38pTTFbb7eeRvhuUNoPAgEk4o1urYrtPq4G9jyg==", "dev": true, "requires": { "@mirzazeyrek/node-resemble-js": "^1.2.1", @@ -23086,13 +23309,29 @@ "os": "^0.1.2", "p-map": "^4.0.0", "path": "^0.12.7", - "playwright": "^1.23.4", - "portfinder": "^1.0.28", - "puppeteer": "^15.4.0", + "playwright": "^1.32.1", + "portfinder": "^1.0.32", + "puppeteer": "^19.7.0", "super-simple-web-server": "^1.1.3", "temp": "^0.9.4" }, "dependencies": { + "@puppeteer/browsers": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", + "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", + "dev": true, + "requires": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -23112,6 +23351,15 @@ "supports-color": "^7.1.0" } }, + "chromium-bidi": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", + "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", + "dev": true, + "requires": { + "mitt": "3.0.0" + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -23127,12 +23375,69 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "cosmiconfig": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "dev": true, + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + } + }, + "devtools-protocol": { + "version": "0.0.1107588", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", + "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", + "dev": true + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", + "dev": true + }, + "puppeteer": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", + "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", + "dev": true, + "requires": { + "@puppeteer/browsers": "0.5.0", + "cosmiconfig": "8.1.3", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "puppeteer-core": "19.11.1" + } + }, + "puppeteer-core": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", + "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", + "dev": true, + "requires": { + "@puppeteer/browsers": "0.5.0", + "chromium-bidi": "0.4.7", + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1107588", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.13.0" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -23141,6 +23446,13 @@ "requires": { "has-flag": "^4.0.0" } + }, + "ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "requires": {} } } }, @@ -23228,9 +23540,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz", - "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -23641,9 +23953,9 @@ "dev": true }, "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, "class-utils": { @@ -23842,9 +24154,9 @@ "dev": true }, "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", "dev": true }, "collection-map": { @@ -24343,9 +24655,9 @@ "dev": true }, "deepmerge": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", - "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true }, "default-compare": { @@ -24414,9 +24726,9 @@ "dev": true }, "devtools-protocol": { - "version": "0.0.1019158", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1019158.tgz", - "integrity": "sha512-wvq+KscQ7/6spEV7czhnZc9RM/woz1AY+/Vpd8/h2HFMwJSdTliu7f/yr1A6vDdJfKICZsShqsYpEQbdhg8AFQ==", + "version": "0.0.1045489", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1045489.tgz", + "integrity": "sha512-D+PTmWulkuQW4D1NTiCRCFxF7pQPn0hgp4YyX4wAQ6xYXKOadSWPR3ENGDQ47MW/Ewc9v2rpC/UEEGahgBYpSQ==", "dev": true }, "diff": { @@ -24798,15 +25110,14 @@ "dev": true }, "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, "requires": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2", - "optionator": "^0.8.1", "source-map": "~0.6.1" }, "dependencies": { @@ -24815,45 +25126,6 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } } } }, @@ -27991,13 +28263,13 @@ } }, "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "requires": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "dependencies": { @@ -28007,6 +28279,33 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "requires": { + "semver": "^7.5.3" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -28015,6 +28314,12 @@ "requires": { "has-flag": "^4.0.0" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, @@ -28030,9 +28335,9 @@ } }, "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -28304,6 +28609,20 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "jest-environment-node": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", + "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + } + }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -28576,74 +28895,61 @@ } }, "jest-environment-node": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", - "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.4.tgz", + "integrity": "sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==", "dev": true, "requires": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/environment": "^29.6.4", + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - } - }, - "jest-environment-puppeteer": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/jest-environment-puppeteer/-/jest-environment-puppeteer-7.0.1.tgz", - "integrity": "sha512-ZfNK2jfY4Ru7WQW9aq/WStkyf6I74Y141j1FTGiZtKfj6xh058N+vtWnt7o1yw3SOumrIAL9lMdKWZxWZRVHuA==", - "dev": true, - "requires": { - "chalk": "^4.1.2", - "cwd": "^0.10.0", - "jest-dev-server": "^7.0.1", - "jest-environment-node": "^29.4.1", - "merge-deep": "^3.0.3" + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" }, "dependencies": { "@jest/environment": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.3.tgz", - "integrity": "sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.4.tgz", + "integrity": "sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==", "dev": true, "requires": { - "@jest/fake-timers": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.4.3" + "jest-mock": "^29.6.3" } }, "@jest/fake-timers": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.3.tgz", - "integrity": "sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.4.tgz", + "integrity": "sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==", "dev": true, "requires": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.4.3", - "jest-mock": "^29.4.3", - "jest-util": "^29.4.3" + "jest-message-util": "^29.6.3", + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" } }, "@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "requires": { - "@sinclair/typebox": "^0.25.16" + "@sinclair/typebox": "^0.27.8" } }, "@jest/types": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", - "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "requires": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -28652,27 +28958,27 @@ } }, "@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true }, "@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", "dev": true, "requires": { "type-detect": "4.0.8" } }, "@sinonjs/fake-timers": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", - "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, "requires": { - "@sinonjs/commons": "^2.0.0" + "@sinonjs/commons": "^3.0.0" } }, "ansi-styles": { @@ -28739,55 +29045,41 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "jest-environment-node": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.3.tgz", - "integrity": "sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg==", - "dev": true, - "requires": { - "@jest/environment": "^29.4.3", - "@jest/fake-timers": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/node": "*", - "jest-mock": "^29.4.3", - "jest-util": "^29.4.3" - } - }, "jest-message-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz", - "integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", + "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.4.3", + "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.4.3", + "pretty-format": "^29.6.3", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-mock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.3.tgz", - "integrity": "sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz", + "integrity": "sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==", "dev": true, "requires": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-util": "^29.4.3" + "jest-util": "^29.6.3" } }, "jest-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz", - "integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", + "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", "dev": true, "requires": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -28806,12 +29098,12 @@ } }, "pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", "dev": true, "requires": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -28844,6 +29136,70 @@ } } }, + "jest-environment-puppeteer": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/jest-environment-puppeteer/-/jest-environment-puppeteer-7.0.1.tgz", + "integrity": "sha512-ZfNK2jfY4Ru7WQW9aq/WStkyf6I74Y141j1FTGiZtKfj6xh058N+vtWnt7o1yw3SOumrIAL9lMdKWZxWZRVHuA==", + "dev": true, + "requires": { + "chalk": "^4.1.2", + "cwd": "^0.10.0", + "jest-dev-server": "^7.0.1", + "jest-environment-node": "^29.4.1", + "merge-deep": "^3.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "jest-get-type": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", @@ -29279,6 +29635,20 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-environment-node": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", + "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -29452,9 +29822,9 @@ } }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -30734,9 +31104,9 @@ "dev": true }, "node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, "requires": { "whatwg-url": "^5.0.0" @@ -31410,9 +31780,9 @@ } }, "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true }, "pixelmatch": { @@ -31481,18 +31851,19 @@ } }, "playwright": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.31.1.tgz", - "integrity": "sha512-zKJabsIA2rvOwJ12lGTqWv4HVJzlfw2JtUvO4hAr7J8UXQZ1qEPpX20E1vcz/9fotnTkwgqp3CVdIBwptBN3Fg==", + "version": "1.38.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.38.1.tgz", + "integrity": "sha512-oRMSJmZrOu1FP5iu3UrCx8JEFRIMxLDM0c/3o4bpzU5Tz97BypefWf7TuTNPWeCe279TPal5RtPPZ+9lW/Qkow==", "dev": true, "requires": { - "playwright-core": "1.31.1" + "fsevents": "2.3.2", + "playwright-core": "1.38.1" } }, "playwright-core": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.31.1.tgz", - "integrity": "sha512-JTyX4kV3/LXsvpHkLzL2I36aCdml4zeE35x+G5aPc4bkLsiRiQshU5lWeVpHFAuC8xAcbI6FDcw/8z3q2xtJSQ==", + "version": "1.38.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.38.1.tgz", + "integrity": "sha512-tQqNFUKa3OfMf4b2jQ7aGLB8o9bS3bOY0yMEtldtC2+spf8QXG9zvXLTXUeRsoNuxEYMgLYR+NXfAa1rjKRcrg==", "dev": true }, "plugin-error": { @@ -31851,29 +32222,28 @@ "dev": true }, "puppeteer": { - "version": "15.5.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-15.5.0.tgz", - "integrity": "sha512-+vZPU8iBSdCx1Kn5hHas80fyo0TiVyMeqLGv/1dygX2HKhAZjO9YThadbRTCoTYq0yWw+w/CysldPsEekDtjDQ==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-18.1.0.tgz", + "integrity": "sha512-2RCVWIF+pZOSfksWlQU0Hh6CeUT5NYt66CDDgRyuReu6EvBAk1y+/Q7DuzYNvGChSecGMb7QPN0hkxAa3guAog==", "dev": true, "requires": { "cross-fetch": "3.1.5", "debug": "4.3.4", - "devtools-protocol": "0.0.1019158", + "devtools-protocol": "0.0.1045489", "extract-zip": "2.0.1", "https-proxy-agent": "5.0.1", - "pkg-dir": "4.2.0", "progress": "2.0.3", "proxy-from-env": "1.1.0", "rimraf": "3.0.2", "tar-fs": "2.1.1", "unbzip2-stream": "1.4.3", - "ws": "8.8.0" + "ws": "8.9.0" }, "dependencies": { "ws": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz", - "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", + "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", "dev": true, "requires": {} } @@ -33885,9 +34255,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz", - "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -35144,9 +35514,9 @@ } }, "ws": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz", - "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "dev": true, "requires": {} }, diff --git a/package.json b/package.json index b686f5006..634e8869e 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "minimist": "^1.2.6", "nunjucks": "^3.2.3", "prettier": "^2.7.1", + "puppeteer": "^18.1.0", "sass": "^1.53.0", "start-server-and-test": "^1.14.0", "stylelint": "^13.13.1", diff --git a/packages/components/footer/README.md b/packages/components/footer/README.md index 2def8048c..99a2054a3 100644 --- a/packages/components/footer/README.md +++ b/packages/components/footer/README.md @@ -6,25 +6,39 @@ Find out more about the footer component and when to use it in the [NHS digital ## Quick start examples -### Footer +### Footer (default) -[Preview the footer component](https://nhsuk.github.io/nhsuk-frontend/components/footer/index.html) +[Preview the footer (default) component](https://nhsuk.github.io/nhsuk-frontend/components/footer/index.html) #### HTML markup ```html @@ -61,17 +75,213 @@ Find out more about the footer component and when to use it in the [NHS digital })}} ``` +### Footer (columns) + +[Preview the Footer (columns) component](https://nhsuk.github.io/nhsuk-frontend/components/footer/footer-in-columns.html) + +#### HTML markup + +```html + +``` + +#### Nunjucks macro + +``` +{% from 'components/footer/macro.njk' import footer %} + +{{ footer({ + "links": [ + { + "URL": "#", + "label": "Home" + }, + { + "URL": "#", + "label": "Health A to Z" + }, + { + "URL": "#", + "label": "Live Well" + }, + { + "URL": "#", + "label": "Mental health" + }, + { + "URL": "#", + "label": "Care and support" + }, + { + "URL": "#", + "label": "Accessibility statement" + }, + { + "URL": "#", + "label": "Pregnancy" + }, + { + "URL": "#", + "label": "NHS services" + }, + { + "URL": "#", + "label": "Coronavirus (COVID-19)" + } + ], + "linksColumn2": [ + { + "URL": "#", + "label": "NHS App" + }, + { + "URL": "#", + "label": "Find my NHS number" + }, + { + "URL": "#", + "label": "Your health records" + }, + { + "URL": "#", + "label": "About the NHS" + }, + { + "URL": "#", + "label": "Healthcare abroad" + } + ], + "linksColumn3": [ + { + "URL": "#", + "label": "Contact us" + }, + { + "URL": "#", + "label": "Other NHS websites" + }, + { + "URL": "#", + "label": "Profile editor login" + } + ], + "metaLinks": [ + { + "URL": "#", + "label": "About us" + }, + { + "URL": "#", + "label": "Accessibility statement" + }, + { + "URL": "#", + "label": "Our policies" + }, + { + "URL": "#", + "label": "Cookies" + } + ] +})}} +``` + ### Nunjucks arguments The footer Nunjucks macro takes the following arguments: -| Name | Type | Required | Description | -| ------------------ | ------ | -------- | --------------------------------------------------------------------------------------------- | -| **links** | array | No | Array of primary navigation items for use in the footer. | -| **links.[].url** | string | No | The href of a primary navigation item in the footer. | -| **links.[].label** | string | No | The label of a primary navigation item in the footer. | -| **classes** | string | No | Optional additional classes to add to the footer container. Separate each class with a space. | -| **attributes** | object | No | Any extra HTML attributes (for example data attributes) to add to the footer container. | -| **copyright** | string | No | The label for the copyright notice in the footer. | +| Name | Type | Required | Description | +| ------------------------- | ------ | -------- | --------------------------------------------------------------------------------------------- | +| **links** | array | No | Array of first column of navigation items for use in the footer. | +| **links.[].url** | string | No | The href of a navigation item in the first column of the footer. | +| **links.[].label** | string | No | The label of a navigation item in the first column of the footer. | +| **linksColumn2** | array | No | Array of second column of navigation items for use in the footer. | +| **linksColumn2.[].url** | string | No | The href of a navigation item in the second column of the footer. | +| **linksColumn2.[].label** | string | No | The label of a navigation item in the second column of the footer. | +| **linksColumn3** | array | No | Array of third column of navigation items for use in the footer. | +| **linksColumn3.[].url** | string | No | The href of a navigation item in the third column of the footer. | +| **linksColumn3.[].label** | string | No | The label of a navigation item in the third column of the footer. | +| **classes** | string | No | Optional additional classes to add to the footer container. Separate each class with a space. | +| **attributes** | object | No | Any extra HTML attributes (for example data attributes) to add to the footer container. | +| **copyright** | string | No | The label for the copyright notice in the footer. | +| **metaLinks** | array | No | Array of policy navigation items for use in the footer. | +| **metaLinks.[].url** | string | No | The href of a policy navigation item in the footer. | +| **metaLinks.[].label** | string | No | The label of a policy navigation item in the footer. | If you are using Nunjucks macros in production be aware that using `html` arguments, or ones ending with `html` can be a [security risk](https://developer.mozilla.org/en-US/docs/Glossary/Cross-site_scripting). Read more about this in the [Nunjucks documentation](https://mozilla.github.io/nunjucks/api.html#user-defined-templates-warning). diff --git a/packages/components/footer/_footer.scss b/packages/components/footer/_footer.scss index 615e6e77b..cf7534df3 100644 --- a/packages/components/footer/_footer.scss +++ b/packages/components/footer/_footer.scss @@ -2,7 +2,7 @@ COMPONENTS / #FOOTER ========================================================================== */ -.nhsuk-footer { +.nhsuk-footer-container { @include clearfix(); @include print-hide(); @include nhsuk-responsive-padding(5, bottom); @@ -12,23 +12,48 @@ border-top: nhsuk-spacing(1) solid $color_nhsuk-blue; } +.nhsuk-footer { + background-color: $color_nhsuk-grey-4; + margin-bottom: 15px; + + @include mq($from: desktop) { + display: flex; + } +} + .nhsuk-footer__list { @include nhsuk-responsive-padding(4, bottom); list-style-type: none; - margin: 0; + margin-bottom: 25px; padding-left: nhsuk-spacing(0); + &:last-child { + margin-bottom: 15px; + } + @include mq($from: desktop) { float: left; padding-bottom: 0; + padding-right: 40px; width: 75%; + + &:last-child { + padding-right: 0; + } } } .nhsuk-footer__list-item { @include nhsuk-font(16); + @include mq($from: desktop) { + float: none; + margin-right: 0; + } +} + +.nhsuk-footer-default__list-item { @include mq($from: desktop) { float: left; margin-right: nhsuk-spacing(5); @@ -36,26 +61,27 @@ } .nhsuk-footer__list-item-link { - color: $nhsuk-secondary-text-color; + color: $nhsuk-footer-link-text-color; &:visited { - color: $nhsuk-secondary-text-color; + color: $nhsuk-footer-link-text-color; } &:hover { - color: $nhsuk-text-color; + color: $nhsuk-link-hover-color; } } .nhsuk-footer__copyright { @include nhsuk-font(16); - color: $nhsuk-secondary-text-color; + color: $nhsuk-footer-copyright-text-color; margin-bottom: 0; +} - @include mq($from: desktop) { - float: right; - text-align: right; - width: 25%; +.nhsuk-footer__meta { + @include mq($until: desktop) { + border-top: 1px solid #f0f4f5; + padding-top: 35px; } } diff --git a/packages/components/footer/template.njk b/packages/components/footer/template.njk index 9a42abbc2..928cc07e4 100644 --- a/packages/components/footer/template.njk +++ b/packages/components/footer/template.njk @@ -1,17 +1,77 @@ diff --git a/packages/components/header/README.md b/packages/components/header/README.md index 36719bc1f..c97db6fa6 100644 --- a/packages/components/header/README.md +++ b/packages/components/header/README.md @@ -11,9 +11,9 @@ compiled JavaScript for all components `nhsuk.min.js` or the individual componen ## Quick start examples -### Header +### Header (default) -[Preview the header component](https://nhsuk.github.io/nhsuk-frontend/components/header/index.html) +[Preview the header (default) component](https://nhsuk.github.io/nhsuk-frontend/components/header/index.html) #### HTML markup @@ -22,107 +22,83 @@ compiled JavaScript for all components `nhsuk.min.js` or the individual componen
    -
    - -
    - + ``` @@ -143,17 +119,21 @@ compiled JavaScript for all components `nhsuk.min.js` or the individual componen 'url' : 'https://www.nhs.uk/live-well/', 'label' : 'Live Well' }, + { + 'url' : 'https://www.nhs.uk/mental-health/', + 'label' : 'Mental health' + }, { 'url' : 'https://www.nhs.uk/conditions/social-care-and-support/', 'label' : 'Care and support' }, { - 'url' : 'https://www.nhs.uk/news/', - 'label' : 'Health news' + 'url' : 'https://www.nhs.uk/pregnancy/', + 'label' : 'Pregnancy' }, { - 'url' : 'https://www.nhs.uk/service-search', - 'label' : 'Services near you' + 'url' : 'https://www.nhs.uk/nhs-services/', + 'label' : 'NHS services' } ] }) @@ -171,81 +151,67 @@ compiled JavaScript for all components `nhsuk.min.js` or the individual componen
    -
    -
    - -
    -
    - + ``` @@ -255,31 +221,35 @@ compiled JavaScript for all components `nhsuk.min.js` or the individual componen {% from 'components/header/macro.njk' import header %} {{ header({ - "showNav": "true", - "showSearch": "false", - "primaryLinks": [ - { - "url" : "https://www.nhs.uk/conditions", - "label" : "Health A-Z" - }, - { - 'url' : 'https://www.nhs.uk/live-well/', - 'label' : 'Live Well' - }, - { - 'url' : 'https://www.nhs.uk/conditions/social-care-and-support/', - 'label' : 'Care and support' - }, - { - 'url' : 'https://www.nhs.uk/news/', - 'label' : 'Health news' - }, - { - 'url' : 'https://www.nhs.uk/service-search', - 'label' : 'Services near you' - } - ] - }) + "showNav": "true", + "showSearch": "false", + "primaryLinks": [ + { + "url" : "https://www.nhs.uk/conditions", + "label" : "Health A-Z" + }, + { + 'url' : 'https://www.nhs.uk/live-well/', + 'label' : 'Live Well' + }, + { + 'url' : 'https://www.nhs.uk/mental-health/', + 'label' : 'Mental health' + }, + { + 'url' : 'https://www.nhs.uk/conditions/social-care-and-support/', + 'label' : 'Care and support' + }, + { + 'url' : 'https://www.nhs.uk/pregnancy/', + 'label' : 'Pregnancy' + }, + { + 'url' : 'https://www.nhs.uk/nhs-services/', + 'label' : 'NHS services' + } + ] + }) }} ``` @@ -294,36 +264,19 @@ compiled JavaScript for all components `nhsuk.min.js` or the individual componen
    @@ -339,7 +292,33 @@ compiled JavaScript for all components `nhsuk.min.js` or the individual componen {{ header({ "showNav": "false", - "showSearch": "true" + "showSearch": "true", + "primaryLinks": [ + { + "url" : "https://www.nhs.uk/conditions", + "label" : "Health A-Z" + }, + { + 'url' : 'https://www.nhs.uk/live-well/', + 'label' : 'Live Well' + }, + { + 'url' : 'https://www.nhs.uk/mental-health/', + 'label' : 'Mental health' + }, + { + 'url' : 'https://www.nhs.uk/conditions/social-care-and-support/', + 'label' : 'Care and support' + }, + { + 'url' : 'https://www.nhs.uk/pregnancy/', + 'label' : 'Pregnancy' + }, + { + 'url' : 'https://www.nhs.uk/nhs-services/', + 'label' : 'NHS services' + } + ] }) }} ``` @@ -355,10 +334,7 @@ compiled JavaScript for all components `nhsuk.min.js` or the individual componen @@ -379,42 +355,6 @@ compiled JavaScript for all components `nhsuk.min.js` or the individual componen --- -### Header transactional - -[Preview the header transactional component](https://nhsuk.github.io/nhsuk-frontend/components/header/header-transactional.html) - -#### HTML markup - -```HTML - -``` - -#### Nunjucks macro - -``` -{% from 'components/header/macro.njk' import header %} - -{{ header({ - "transactional": "true", - "showNav": "false", - "showSearch": "false" - }) -}} -``` - ---- - ### Header transactional with service name [Preview the header transactional with service name component](https://nhsuk.github.io/nhsuk-frontend/components/header/header-transactional-service-name.html) @@ -422,18 +362,15 @@ compiled JavaScript for all components `nhsuk.min.js` or the individual componen #### HTML markup ```HTML -
    ``` #### Nunjucks macro ``` +{% from 'components/header/macro.njk' import header %} + {{ header({ "showNav": "true", "showSearch": "true", @@ -620,115 +527,85 @@ compiled JavaScript for all components `nhsuk.min.js` or the individual componen
    -
    - -
    - +
    ``` #### Nunjucks macro ``` +{% from 'components/header/macro.njk' import header %} + {{ header({ "showNav": "true", "showSearch": "true", @@ -775,121 +652,92 @@ compiled JavaScript for all components `nhsuk.min.js` or the individual componen
    -
    - -
    - + ``` #### Nunjucks macro ``` +{% from 'components/header/macro.njk' import header %} + {{ header({ "showNav": "true", "showSearch": "true", "classes": "nhsuk-header--white nhsuk-header--white-nav", "organisation": { - "name": "Anytown Anyplace Anywhere", + "name": "Anytown Anyplace", + "split": "Anywhere", "descriptor": "NHS Foundation Trust" }, "primaryLinks": [ diff --git a/packages/components/header/_header-organisation.scss b/packages/components/header/_header-organisation.scss new file mode 100644 index 000000000..94df27a70 --- /dev/null +++ b/packages/components/header/_header-organisation.scss @@ -0,0 +1,124 @@ +/** + * These are the styles for the organisation header variants. +*/ + +.nhsuk-header--organisation { + .nhsuk-header__link { + height: auto; + text-decoration: none; + width: auto; + + &:hover { + color: $color_nhsuk-white; + text-decoration: underline; + + .nhsuk-logo { + box-shadow: none; + } + } + + &:focus { + background: $nhsuk-focus-color; + box-shadow: 0 0 0 $nhsuk-focus-width $nhsuk-focus-color, + 0 $nhsuk-focus-width 0 $nhsuk-focus-width $nhsuk-focus-text-color; + + .nhsuk-organisation-name, + .nhsuk-organisation-descriptor { + color: $nhsuk-focus-text-color; + } + + .nhsuk-logo { + box-shadow: none; + } + + &:hover { + text-decoration: none; + } + } + } + + .nhsuk-header__logo .nhsuk-logo { + @include nhsuk-logo-size-small; + + @media (max-width: 450px) { + height: nhsuk-spacing(4); + width: 60px; + } + + @media (max-width: 375px) { + height: 20px; + width: 50px; + } + } + + .nhsuk-header__navigation { + max-width: 100%; + } +} + +.nhsuk-organisation-name { + color: $color_nhsuk-white; + display: block; + font-size: 22px; + font-weight: bold; + letter-spacing: 0.2px; + line-height: 23px; + margin-top: -2px; + + @include mq($media-type: print) { + color: $nhsuk-print-text-color; + } + + @media (max-width: 450px) { + font-size: 17px; + letter-spacing: 0.1px; + line-height: 17px; + } + + @media (max-width: 375px) { + font-size: 13px; + line-height: 13px; + } + + .nhsuk-organisation-name-split { + display: block; + } +} + +.nhsuk-organisation-descriptor { + color: $color_nhsuk-white; + display: block; + font-size: 15px; + font-weight: bold; + line-height: 21px; + + @include mq($media-type: print) { + color: $color_nhsuk-blue; + } + + @media (max-width: 450px) { + font-size: 12px; + line-height: 18px; + } + + @media (max-width: 375px) { + font-size: 10px; + line-height: 13px; + } +} + +.nhsuk-organisation-logo { + border: 0; + max-height: 100px; + max-width: 280px; + + @media (max-width: 450px) { + max-width: 150px; + } +} + +.nhsuk-organisation-logo[src$=".svg"] { + height: auto; + max-width: 220px; + width: 100%; +} diff --git a/packages/components/header/_header-service.scss b/packages/components/header/_header-service.scss new file mode 100644 index 000000000..112539c6a --- /dev/null +++ b/packages/components/header/_header-service.scss @@ -0,0 +1,58 @@ +/** + * These are the styles for the service header variants. +*/ + +.nhsuk-header__link--service { + height: auto; + margin-bottom: -(nhsuk-spacing(1)); + text-decoration: none; + width: auto; + + @include mq($from: large-desktop) { + align-items: center; + display: flex; + -ms-flex-align: center; + margin-bottom: 0; + width: auto; + } + + &:hover { + background: none; + + .nhsuk-header__service-name { + text-decoration: underline; + } + } + + &:focus { + background: $nhsuk-focus-color; + box-shadow: 0 0 0 $nhsuk-focus-width $nhsuk-focus-color, + 0 $nhsuk-focus-width 0 $nhsuk-focus-width $nhsuk-focus-text-color; + + .nhsuk-header__service-name { + color: $nhsuk-focus-text-color; + text-decoration: none; + } + + .nhsuk-logo { + box-shadow: none; + } + } +} + +.nhsuk-header__service-name { + @include nhsuk-font(19); + + color: $color_nhsuk-white; + display: block; + padding-left: 0; + padding-right: 0; + + @include mq($from: large-desktop) { + padding-left: nhsuk-spacing(3); + } + + @include mq($until: large-desktop) { + max-width: 220px; + } +} diff --git a/packages/components/header/_header-transactional.scss b/packages/components/header/_header-transactional.scss new file mode 100644 index 000000000..abea22684 --- /dev/null +++ b/packages/components/header/_header-transactional.scss @@ -0,0 +1,61 @@ +/** + * These are the styles for the transactional header variants. +*/ + +.nhsuk-header__transactional-service-name { + padding-left: nhsuk-spacing(3); + padding-top: 3px; + + @include mq($until: tablet) { + padding-bottom: nhsuk-spacing(3); + } + + @include mq($until: tablet) { + padding-left: 0; + padding-top: nhsuk-spacing(2); + width: 100%; + } +} + +.nhsuk-header__transactional-service-name--link { + @include nhsuk-link-style-white; + @include nhsuk-font(19); + text-decoration: none; + + &:hover { + text-decoration: underline; + } +} + +.nhsuk-header__transactional { + .nhsuk-header__container { + justify-content: normal; + } + + .nhsuk-header__link { + @include nhsuk-logo-size-small; + display: block; + } + + .nhsuk-logo { + @include nhsuk-logo-size-small; + } +} + +.nhsuk-header__transactional--logo { + max-width: 100%; + + @include mq($from: tablet) { + .nhsuk-header__link--service { + align-items: center; + display: flex; + -ms-flex-align: center; + margin-bottom: 0; + width: auto; + } + + .nhsuk-header__service-name { + padding-left: nhsuk-spacing(3); + } + } +} diff --git a/packages/components/header/_header-white.scss b/packages/components/header/_header-white.scss new file mode 100644 index 000000000..a59a610c4 --- /dev/null +++ b/packages/components/header/_header-white.scss @@ -0,0 +1,130 @@ +/** + * These are the styles for the white header variants. +*/ + +.nhsuk-header--white { + background-color: $color_nhsuk-white; + + .nhsuk-header__search-wrap { + margin-bottom: nhsuk-spacing(3); + + @include mq($until: tablet) { + &::after { + background: $color_nhsuk-white; + } + } + } + + .nhsuk-navigation-container { + background-color: $color_nhsuk-blue; + } + + .nhsuk-logo { + .nhsuk-logo__background { + fill: $color_nhsuk-blue; + } + + .nhsuk-logo__text { + fill: $color_nhsuk-white; + } + } + + .nhsuk-header__link { + &:hover { + color: $nhsuk-text-color; + text-decoration: underline; + + .nhsuk-organisation-descriptor { + color: $nhsuk-text-color; + } + } + } + + .nhsuk-search__submit { + background-color: $color_nhsuk-blue; + + .nhsuk-icon__search { + fill: $color_nhsuk-white; + } + + &:hover { + background-color: $color_shade_nhsuk-blue-20; + border-color: $color_shade_nhsuk-blue-20; + } + + &:focus { + background-color: $nhsuk-focus-color; + + .nhsuk-icon__search { + fill: $nhsuk-focus-text-color; + } + } + } + + .nhsuk-search__input { + border: 1px solid $color_nhsuk-grey-3; + + &:focus { + border: 2px solid $nhsuk-focus-text-color; + + @include mq($until: tablet) { + border: $nhsuk-focus-width solid $nhsuk-focus-text-color; + } + } + } + + .nhsuk-header__search-form { + @include mq($until: tablet) { + padding-top: 0; + } + } + + .nhsuk-organisation-name { + color: shade($color_nhsuk-black, 100%); + } + + .nhsuk-organisation-descriptor { + color: $color_nhsuk-blue; + } + + .nhsuk-header__transactional-service-name--link { + color: $color_nhsuk-black; + } + + .nhsuk-header__service-name { + color: $nhsuk-text-color; + } +} + +.nhsuk-header--white-nav { + .nhsuk-navigation-container { + background-color: $color_nhsuk-white; + } + .nhsuk-navigation { + background-color: $color_nhsuk-white; + + .nhsuk-header__navigation-list { + border-top: 1px solid $color_nhsuk-grey-5; + } + + .nhsuk-header__navigation-link { + color: $color_nhsuk-blue; + + &:visited { + color: $color_nhsuk-blue; + } + + &:focus { + color: $nhsuk-focus-text-color; + + &:hover { + background: $nhsuk-focus-color; + } + } + } + + .nhsuk-icon__chevron-down { + fill: $color_nhsuk-blue; + } + } +} diff --git a/packages/components/header/_header.scss b/packages/components/header/_header.scss index 130967841..dcc5171dc 100644 --- a/packages/components/header/_header.scss +++ b/packages/components/header/_header.scss @@ -3,7 +3,7 @@ ========================================================================== */ /** - * The behaviour with regards to responsiveness is as follow: +* The behaviour with regards to responsiveness is as follow: * * - Mobile to tablet view * Menu toggle button visible and navigation links hidden, search toggle @@ -16,41 +16,34 @@ * - Desktop+ view * Menu toggle button hidden and navigation links visible, search toggle * button hidden and search form visible - * - * 1. Custom height and width of the logo - * 2. Custom height and width of form items - * 3. Custom height and width of svg icons - * 4. Remove inner border on buttons for Firefox, see - * https://github.com/necolas/normalize.css/issues/393 - * 5. Proprietary extension so form field looks the same in Safari - * 6. Custom margin to move menu toggle past the search toggle button - * 7. Custom border value between expanded search and expanded menu if both open at the same time - * 8. Don't display the link address for the logo anchor, see - * core/elements/_links.scss - * 9. Use non variable colour to follow NHS England guidelines on logo colour - * 10. Remove random top margin in Safari - * 11. Align close icon with nav item arrow icons - * 12. Add nhsuk-spacing(9) to align right and left main nav with header */ .nhsuk-header { - @include clearfix(); background-color: $color_nhsuk-blue; } .nhsuk-header__container { - @include clearfix(); + margin: 0 nhsuk-spacing(3); + max-width: $nhsuk-page-width; padding: 20px 0; @include mq($until: tablet) { - margin: 0; - padding: nhsuk-spacing(3); + padding-bottom: 0; + } + + @include mq($from: tablet) { + border-bottom: 1px solid $color_transparent_nhsuk-white-20; + display: flex; + justify-content: space-between; + margin: 0 nhsuk-spacing(5); + } + + @include mq($from: large-desktop) { + margin: 0 auto; } } .nhsuk-header__logo { - float: left; - @include mq($until: tablet) { position: relative; z-index: 1; @@ -77,7 +70,7 @@ } .nhsuk-logo { - @include nhsuk-logo-size; /* [1] */ + @include nhsuk-logo-size; border: 0; } @@ -91,7 +84,7 @@ } .nhsuk-header__link { - @include nhsuk-logo-size; /* [1] */ + @include nhsuk-logo-size; display: block; &:hover { @@ -111,7 +104,7 @@ @include mq($media-type: print) { &:after { - content: ""; /* [8] */ + content: ""; } } @@ -122,19 +115,36 @@ } } +.nhsuk-header__logo--only { + max-width: 100%; + + @include mq($until: tablet) { + padding-bottom: nhsuk-spacing(3); + } + @include mq($from: tablet) { + .nhsuk-header__link--service { + align-items: center; + display: flex; + -ms-flex-align: center; + margin-bottom: 0; + width: auto; + } + + .nhsuk-header__service-name { + padding-left: nhsuk-spacing(3); + } + } +} + .nhsuk-header__content { - @include clearfix(); @include print-hide(); - position: relative; &.js-show { - border-bottom: nhsuk-spacing(1) solid $color_nhsuk-grey-5; /* [7] */ + border-bottom: nhsuk-spacing(1) solid $color_nhsuk-grey-5; } @include mq($from: tablet) { - float: right; - &.js-show { border-bottom: 0; } @@ -142,39 +152,16 @@ } .nhsuk-header__search { - @include clearfix(); - position: relative; text-align: right; @include mq($from: tablet) { - float: left; margin-left: nhsuk-spacing(2); } } -.nhsuk-header__search-toggle { - @include toggle-button(); - min-height: nhsuk-spacing(6); /* [2] */ - padding: nhsuk-spacing(1) nhsuk-spacing(2) 0; - position: absolute; - right: 0; - top: 0; - - .nhsuk-icon__search { - fill: $color_nhsuk-white; - height: 21px; /* [3] */ - width: 21px; /* [3] */ - } - - &:focus { - @include nhsuk-focused-button(); - box-shadow: 0 0 0 2px $nhsuk-focus-color, 0 $nhsuk-focus-width 0 2px $nhsuk-focus-text-color; - } - - @include mq($from: tablet) { - display: none; - } +.nhsuk-header__search-no-nav { + padding-bottom: nhsuk-spacing(3); } .nhsuk-header__search-form { @@ -182,43 +169,28 @@ overflow: visible; @include mq($until: tablet) { - background-color: $color_nhsuk-white; display: flex; - padding: nhsuk-spacing(3); + margin: nhsuk-spacing(3) 0 0; + position: relative; width: 100%; } } .nhsuk-header__search-wrap { - @include mq($until: tablet) { - display: none; - - &.js-show { - clear: both; - display: flex; - margin-bottom: -20px; - margin-left: -16px; - margin-right: -16px; - padding-top: 16px; - text-align: left; - } - } - @include mq($from: tablet) { display: block; - line-height: 0; } } .nhsuk-search__input { - -webkit-appearance: listbox; /* [5] */ + -webkit-appearance: listbox; border-bottom-left-radius: $nhsuk-border-radius; border-bottom-right-radius: 0; border-top-left-radius: $nhsuk-border-radius; border-top-right-radius: 0; padding: 0 nhsuk-spacing(3); &:focus { - border: 4px solid $nhsuk-focus-text-color; + border: nhsuk-spacing(1) solid $nhsuk-focus-text-color; box-shadow: 0 0 0 $nhsuk-focus-width $nhsuk-focus-color; outline: $nhsuk-focus-width solid transparent; outline-offset: $nhsuk-focus-width; @@ -238,25 +210,24 @@ } @include mq($until: tablet) { - border-bottom: 1px solid $color_nhsuk-grey-3; - border-left: 1px solid $color_nhsuk-grey-3; - border-right: 0; - border-top: 1px solid $color_nhsuk-grey-3; + border: 1px solid $color_nhsuk-white; + border-bottom-right-radius: $nhsuk-border-radius; + border-top-right-radius: $nhsuk-border-radius; flex-grow: 2; -ms-flex-positive: 2; font-size: inherit; - height: 52px; /* [4] */ + height: 40px; margin: 0; outline: none; - width: 100%; /* [4] */ + width: 100%; z-index: 1; } @include mq($from: tablet) { border: 1px solid $color_nhsuk-white; font-size: $nhsuk-base-font-size; - height: nhsuk-spacing(6); /* [2] */ - width: 200px; /* [2] */ + height: nhsuk-spacing(6); + width: 200px; } @include mq($from: desktop) { @@ -277,7 +248,7 @@ padding: 0; &::-moz-focus-inner { - border: 0; /* [4] */ + border: 0; } &:hover { @@ -285,19 +256,29 @@ } @include mq($until: tablet) { - background-color: $color_nhsuk-green; - height: 52px; /* [2] */ + background-color: $color_nhsuk-grey-5; + border: 0; + height: 40px; margin: 0; padding: nhsuk-spacing(2) nhsuk-spacing(2) 0; + position: absolute; + right: 0; + top: 0; + z-index: 9; .nhsuk-icon__search { - fill: $color_nhsuk-white; - height: 38px; /* [3] */ - width: 38px; /* [3] */ + fill: $color_nhsuk-blue; + height: 27px; + width: 27px; } &:hover { - background-color: $nhsuk-button-hover-color; + background-color: $color_shade_nhsuk-blue-35; + border: 1px solid $color_nhsuk-white; + + .nhsuk-icon { + fill: $color_nhsuk-white; + } } &:focus { @@ -323,12 +304,13 @@ @include mq($from: tablet) { background-color: $color_nhsuk-grey-5; display: block; - height: nhsuk-spacing(6); /* [2] */ - width: 44px; /* [2] */ + height: nhsuk-spacing(6); + line-height: 1; + width: 44px; .nhsuk-icon__search { - height: 27px; /* [3] */ - width: 27px; /* [3] */ + height: 27px; + width: 27px; } &:hover { @@ -356,194 +338,19 @@ } } -.nhsuk-search__close { - @include mq($until: tablet) { - @include close-button(); - - margin-left: nhsuk-spacing(2); - margin-right: -(nhsuk-spacing(2)); /* [11] */ - margin-top: nhsuk-spacing(2); - - &:focus { - .nhsuk-icon__close { - fill: $nhsuk-focus-text-color; - } - } - } - - @include mq($from: tablet) { - display: none; - } -} - -.nhsuk-search__input--withdropdown { - border-bottom-left-radius: 0; -} - -.nhsuk-search__submit--withdropdown { - border-bottom-right-radius: 0; -} - -/* Main navigation - * - * Appears below the header strip - ====================================================================== */ - -.nhsuk-header__menu { - float: right; - - @include mq($from: tablet) { - float: left; - } -} - -.nhsuk-header__menu-toggle { - @include toggle-button(); - - display: block; - font-size: 16px; - font-weight: 400; - line-height: $nhsuk-base-line-height; - margin-right: 0; /* [6] */ - padding: 7px nhsuk-spacing(3); - position: relative; - text-decoration: none; - z-index: 1; - - @include mq($until: tablet) { - right: 48px; - } - - @include mq($from: tablet, $until: large-desktop) { - margin-top: 0; /* [10] */ - } - - @include mq($from: large-desktop) { - display: none; - } - - &:focus { - @include nhsuk-focused-button; - - box-shadow: 0 0 0 2px $nhsuk-focus-color, 0 $nhsuk-focus-width 0 2px $nhsuk-focus-text-color; - } -} - -/* 'only' modifier for when there is only the menu in the header, no search - ====================================================================== */ - -.nhsuk-header__menu--only { - .nhsuk-header__menu-toggle { - @include mq($until: tablet) { - position: relative; - right: auto; - top: auto; - } - } -} - -.nhsuk-header__navigation { - @include print-hide(); - background-color: $color_nhsuk-white; - clear: both; - display: none; - overflow: hidden; - - &.js-show { - display: block; - - @include mq($until: large-desktop) { - border-bottom: nhsuk-spacing(1) solid $color_nhsuk-grey-5; /* [7] */ - border-top: nhsuk-spacing(1) solid $color_nhsuk-grey-5; /* [7] */ - - .nhsuk-width-container { - margin: 0 nhsuk-spacing(3); - } - } - - @include mq($until: desktop) { - .nhsuk-width-container { - margin: 0; - } - } - } - - @include mq($from: large-desktop) { - background-color: $color_nhsuk-blue; - display: block; - margin: 0 auto; - max-width: $nhsuk-page-width + nhsuk-spacing(9); /* [12] */ - } -} - -.nhsuk-header__navigation-title { - font-weight: $nhsuk-font-bold; - margin-bottom: 0; - padding: nhsuk-spacing(3); - position: relative; - - @include mq($from: large-desktop) { - display: none; - } -} - -.nhsuk-header__navigation-close { - @include close-button(); - overflow: hidden; - position: absolute; - right: nhsuk-spacing(2); - top: nhsuk-spacing(2); - white-space: nowrap; - - &:focus { - .nhsuk-icon__close { - fill: $nhsuk-focus-text-color; - } - } -} - -.nhsuk-header__navigation-list { - list-style: none; - margin: 0; - padding-left: 0; - - @include mq($from: large-desktop) { - border-top: 1px solid $nhsuk-secondary-border-color; - display: flex; - justify-content: space-between; - padding: 0; - width: 100%; - } -} - -.nhsuk-header__navigation-item { - border-top: 1px solid $color_nhsuk-grey-5; - margin-bottom: 0; - position: relative; - - @include mq($from: large-desktop) { - border-top: 0; - margin: 0; - text-align: center; - - .nhsuk-icon__chevron-right { - display: none; - } - } -} - .nhsuk-header__navigation-link { @include nhsuk-font(16); border-bottom: nhsuk-spacing(1) solid transparent; border-top: nhsuk-spacing(1) solid transparent; - color: $color_nhsuk-blue; + color: $color_nhsuk-white; display: block; - padding: 12px nhsuk-spacing(3); - text-decoration: none; + font-size: inherit; + padding: nhsuk-spacing(3) 12px; + text-decoration: underline; + white-space: nowrap; - @include mq($from: large-desktop) { - color: $color_nhsuk-white; - line-height: normal; + @include mq($from: tablet) { + padding: 12px nhsuk-spacing(3); } .nhsuk-icon__chevron-right { @@ -554,7 +361,7 @@ } &:visited { - color: $color_nhsuk-blue; + color: $color_nhsuk-white; @include mq($from: large-desktop) { color: $color_nhsuk-white; @@ -563,16 +370,12 @@ &:hover { box-shadow: none; - color: $color_nhsuk-blue; - text-decoration: underline; + color: $color_nhsuk-white; + text-decoration: none; @include mq($from: large-desktop) { color: $color_nhsuk-white; } - - .nhsuk-icon__chevron-right { - fill: $color_nhsuk-blue; - } } &:active, @@ -588,10 +391,6 @@ &:hover { background-color: $nhsuk-focus-color; color: $nhsuk-focus-text-color; - - .nhsuk-icon__chevron-right { - fill: $nhsuk-focus-text-color; - } } &:visited { @@ -601,396 +400,138 @@ } } -.nhsuk-header__navigation-item--for-mobile { - @include mq($from: large-desktop) { - display: none; - } -} - -.nhsuk-header__navigation-list--small { - @include mq($from: large-desktop) { - justify-content: flex-start; - } -} - -/** - * Transactional Header with service name -**/ - -.nhsuk-header__transactional-service-name { - float: left; - padding-left: nhsuk-spacing(3); - padding-top: 3px; - - @include mq($until: large-desktop) { - padding-left: 0; - padding-top: nhsuk-spacing(2); - width: 100%; - } -} - -.nhsuk-header__transactional-service-name--link { - @include nhsuk-link-style-white; - @include nhsuk-font(19); - text-decoration: none; - - &:hover { - text-decoration: underline; - } -} - -.nhsuk-header--transactional { - .nhsuk-header__link { - @include nhsuk-logo-size-small; - display: block; - } - - .nhsuk-logo { - @include nhsuk-logo-size-small; - } - - .nhsuk-header__transactional-service-name { - float: left; - } -} - -.nhsuk-header__link--service { - height: auto; - margin-bottom: -(nhsuk-spacing(1)); - text-decoration: none; +// menu toggle button, only shows when screen can't fit all nav items +.nhsuk-header__menu-toggle { + background: transparent; + border: 0; + border-bottom: nhsuk-spacing(1) solid transparent; + border-radius: 0; + border-top: nhsuk-spacing(1) solid transparent; + box-sizing: border-box; + cursor: pointer; + margin: 0; + overflow: visible; + position: relative; + right: 0; + text-align: center; + text-decoration: underline; + vertical-align: top; + visibility: hidden; width: auto; + z-index: 1; - @include mq($from: large-desktop) { - align-items: center; - display: flex; - -ms-flex-align: center; - margin-bottom: 0; - width: auto; + &.nhsuk-header__navigation-link { + padding-right: 30px; } - &:hover { - background: none; - - .nhsuk-header__service-name { - text-decoration: underline; - } + @include mq($from: desktop) { + display: none; } &:focus { - background: $nhsuk-focus-color; - box-shadow: 0 0 0 $nhsuk-focus-width $nhsuk-focus-color, - 0 $nhsuk-focus-width 0 $nhsuk-focus-width $nhsuk-focus-text-color; - - .nhsuk-header__service-name { - color: $nhsuk-focus-text-color; - text-decoration: none; - } + text-decoration: none; - .nhsuk-logo { - box-shadow: none; + .nhsuk-icon__chevron-down { + fill: $color_nhsuk-black; } } } -.nhsuk-header__service-name { - @include nhsuk-font(19); - - color: $color_nhsuk-white; +.nhsuk-header__menu-toggle--visible { + visibility: visible; display: block; - padding-left: 0; - padding-right: 0; - - @include mq($from: large-desktop) { - padding-left: nhsuk-spacing(3); - } - - @include mq($until: large-desktop) { - max-width: 220px; - } } -.nhsuk-header__logo--only { - max-width: 100%; - - @include mq($from: tablet) { - .nhsuk-header__link--service { - align-items: center; - display: flex; - -ms-flex-align: center; - margin-bottom: 0; - width: auto; - } - - .nhsuk-header__service-name { - padding-left: nhsuk-spacing(3); - } +.nhsuk-icon__chevron-down { + .nhsuk-header__menu-toggle[aria-expanded="true"] & { + transform: rotate(270deg); } } -/** - * Organisational header -**/ - -.nhsuk-header--organisation { - .nhsuk-header__link { - height: auto; - text-decoration: none; - width: auto; - - &:hover { - color: $color_nhsuk-white; - text-decoration: underline; - - .nhsuk-logo { - box-shadow: none; - } - } - - &:focus { - background: $nhsuk-focus-color; - box-shadow: 0 0 0 $nhsuk-focus-width $nhsuk-focus-color, - 0 $nhsuk-focus-width 0 $nhsuk-focus-width $nhsuk-focus-text-color; - - .nhsuk-organisation-name, - .nhsuk-organisation-descriptor { - color: $nhsuk-focus-text-color; - } - - .nhsuk-logo { - box-shadow: none; - } - - &:hover { - text-decoration: none; - } - } - } - - .nhsuk-header__logo .nhsuk-logo { - height: 32px; - width: 80px; - - @media (max-width: 450px) { - height: 24px; - width: 60px; - } +.nhsuk-navigation { + display: flex; - @media (max-width: 375px) { - height: 20px; - width: 50px; - } - } - - .nhsuk-header__navigation { - max-width: 100%; + @include mq($until: tablet) { + position: relative; + z-index: 10; } } -.nhsuk-organisation-name { - color: $color_nhsuk-white; - display: block; - font-size: 22px; - font-weight: bold; - letter-spacing: 0.2px; - line-height: 23px; - margin-top: -2px; - - @include mq($media-type: print) { - color: $nhsuk-print-text-color; - } - - @media (max-width: 450px) { - font-size: 17px; - letter-spacing: 0.1px; - line-height: 17px; - } - - @media (max-width: 375px) { - font-size: 13px; - line-height: 13px; - } - - .nhsuk-organisation-name-split { - display: block; - } +%nhsuk-navigation-list { + list-style: none; + margin: 0; + padding: 0; } -.nhsuk-organisation-descriptor { - color: $color_nhsuk-white; - display: block; - font-size: 15px; - font-weight: bold; - line-height: 21px; +// ul of visible nav +.nhsuk-header__navigation-list { + @extend %nhsuk-navigation-list; + @include govuk-width-container; - @include mq($media-type: print) { - color: $color_nhsuk-blue; - } + width: 100%; - @media (max-width: 450px) { - font-size: 12px; - line-height: 18px; + @include mq($from: desktop) { + display: flex; + justify-content: space-between; } - @media (max-width: 375px) { - font-size: 10px; - line-height: 13px; + .js-enabled & { + display: flex; } } -.nhsuk-org-logo { - border: 0; - max-height: 100px; - max-width: 280px; - - @media (max-width: 450px) { - max-width: 150px; - } +.nhsuk-header__navigation-item { + margin-bottom: 0; } -.nhsuk-org-logo[src$=".svg"] { - height: auto; - max-width: 220px; - width: 100%; +.nhsuk-navigation-container { + position: relative; } -// Header (white) - -.nhsuk-header--white { +// ul of hidden nav +.nhsuk-header__drop-down { + @extend %nhsuk-navigation-list; + @include print-hide(); background-color: $color_nhsuk-white; + border-bottom: nhsuk-spacing(1) solid $color_nhsuk-grey-5; + overflow: hidden; + position: absolute; + right: 0; + top: 100%; + left: 0; - .nhsuk-logo { - .nhsuk-logo__background { - fill: $color_nhsuk-blue; - } - - .nhsuk-logo__text { - fill: $color_nhsuk-white; - } - } - - .nhsuk-header__link { - &:hover { - color: $nhsuk-text-color; - text-decoration: underline; - - .nhsuk-organisation-descriptor { - color: $nhsuk-text-color; - } - } - } - - .nhsuk-search__submit { - background-color: $color_nhsuk-blue; - - .nhsuk-icon__search { - fill: $color_nhsuk-white; - } - - &:hover { - background-color: $color_shade_nhsuk-blue-20; - border-color: $color_shade_nhsuk-blue-20; - } - - &:focus { - background-color: $nhsuk-focus-color; - - .nhsuk-icon__search { - fill: $nhsuk-focus-text-color; - } - } - } - - .nhsuk-search__input { - border: 1px solid $color_nhsuk-grey-3; - - &:focus { - border: 2px solid $nhsuk-focus-text-color; - - @include mq($until: tablet) { - border: $nhsuk-focus-width solid $nhsuk-focus-text-color; - } - } - } - - .nhsuk-header__search-toggle, - .nhsuk-header__menu-toggle { - border-color: $color_nhsuk-blue; - color: $color_nhsuk-blue; - - .nhsuk-icon { - fill: $color_nhsuk-blue; - } - - &.is-active, - &:hover { - border-color: $color_shade_nhsuk-blue-20; - color: $color_nhsuk-white; - - .nhsuk-icon { - fill: $color_nhsuk-white; - } - } - - &:focus { - color: $nhsuk-focus-text-color; - - .nhsuk-icon { - fill: $nhsuk-focus-text-color; - } - } - } - - .nhsuk-header__search-form { - @include mq($until: tablet) { - padding-top: 0; - } - } - - .nhsuk-organisation-name { - color: #000; /* [9] */ /* stylelint-disable-line color-no-hex */ - } - - .nhsuk-organisation-descriptor { + .nhsuk-header__navigation-link { color: $color_nhsuk-blue; + padding: 12px nhsuk-spacing(3); } - .nhsuk-header__transactional-service-name--link { - color: $color_nhsuk-black; - } - - .nhsuk-header__navigation-list { - border-top: 0; - } + .nhsuk-header__navigation-item { + border-top: 1px solid $color_nhsuk-grey-5; + margin-bottom: 0; - .nhsuk-header__service-name { - color: $nhsuk-text-color; + @include mq($from: large-desktop) { + border-top: 0; + margin: 0; + text-align: center; + } } } -// Navigation (white) - -.nhsuk-header--white-nav { - .nhsuk-header__navigation { - background-color: $color_nhsuk-white; - - .nhsuk-header__navigation-list { - border-top: 1px solid $color_nhsuk-grey-5; - } - - .nhsuk-header__navigation-link { - color: $color_nhsuk-blue; +.nhsuk-header__drop-down--hidden { + display: none; +} - &:visited { - color: $color_nhsuk-blue; - } +.nhsuk-mobile-menu-container { + align-self: center; + display: none; +} - &:focus { - color: $nhsuk-focus-text-color; +.nhsuk-mobile-menu-container--visible { + display: block; +} - &:hover { - background: $nhsuk-focus-color; - } - } - } +.nhsuk-header__navigation-item--home { + @include mq($from: desktop) { + display: none; } } diff --git a/packages/components/header/header.js b/packages/components/header/header.js index 78284b4a0..11aa6c184 100644 --- a/packages/components/header/header.js +++ b/packages/components/header/header.js @@ -1,7 +1,208 @@ -import MenuToggle from './menuToggle' -import SearchToggle from './searchToggle' +/** + * Header component + * + */ + +class Header { + constructor() { + this.menuIsOpen = false + this.navigation = document.querySelector('.nhsuk-navigation') + this.navigationList = document.querySelector('.nhsuk-header__navigation-list') + this.mobileMenu = document.createElement('ul') + this.mobileMenuToggleButton = document.querySelector('.nhsuk-header__menu-toggle') + this.mobileMenuCloseButton = document.createElement('button') + this.mobileMenuContainer = document.querySelector('.nhsuk-mobile-menu-container') + this.breakpoints = [] + this.width = document.body.offsetWidth + } + + init() { + if (!this.navigation || !this.navigationList || !this.mobileMenuToggleButton || !this.mobileMenuContainer) { + return + } + + this.setupMobileMenu() + this.calculateBreakpoints() + this.updateNavigation() + this.doOnOrientationChange() + + this.handleResize = this.debounce(() => { + this.calculateBreakpoints() + this.updateNavigation() + }) + + this.mobileMenuToggleButton.addEventListener('click', this.toggleMobileMenu.bind(this)) + window.addEventListener('resize', this.handleResize) + window.addEventListener('orientationchange', this.doOnOrientationChange()) + } + + debounce(func, timeout = 100) { + let timer + return (...args) => { + clearTimeout(timer) + timer = setTimeout(() => { + func.apply(this, args) + }, timeout) + } + } + + /** + * Calculate breakpoints. + * + * Calculate the breakpoints by summing the widths of + * each navigation item. + * + */ + calculateBreakpoints() { + let childrenWidth = 0 + for (let i = 0; i < this.navigationList.children.length; i++) { + childrenWidth += this.navigationList.children[i].offsetWidth + this.breakpoints[i] = childrenWidth + } + } + + // Add the mobile menu to the DOM + setupMobileMenu() { + this.mobileMenuContainer.appendChild(this.mobileMenu) + this.mobileMenu.classList.add('nhsuk-header__drop-down', 'nhsuk-header__drop-down--hidden') + } + + /** + * Close the mobile menu + * + * Closes the mobile menu and updates accessibility state. + * + * Remvoes the margin-bottom from the navigation + */ + closeMobileMenu() { + this.menuIsOpen = false + this.mobileMenu.classList.add('nhsuk-header__drop-down--hidden') + this.navigation.style.marginBottom = 0 + this.mobileMenuToggleButton.setAttribute('aria-expanded', 'false') + this.mobileMenuToggleButton.focus() + this.mobileMenuCloseButton.removeEventListener('click', this.closeMobileMenu.bind(this)) + document.removeEventListener('keydown', this.handleEscapeKey.bind(this)) + } + + /** + * Escape key handler + * + * This function is called when the user + * presses the escape key to close the mobile menu. + * + */ + handleEscapeKey(e) { + if (e.key === 'Escape') { + this.closeMobileMenu() + } + } + + /** + * Open the mobile menu + * + * Opens the mobile menu and updates accessibility state. + * + * The mobile menu is absolutely positioned, so it adds a margin + * to the bottom of the navigation to prevent it from overlapping + * + * Adds event listeners for the close button, + */ + + openMobileMenu() { + const marginBody = this.mobileMenu.offsetHeight + this.menuIsOpen = true + this.mobileMenu.classList.remove('nhsuk-header__drop-down--hidden') + this.navigation.style.marginBottom = `${marginBody}px` + this.mobileMenuToggleButton.setAttribute('aria-expanded', 'true') + + // add event listerer for esc key to close menu + document.addEventListener('keydown', this.handleEscapeKey.bind(this)) + + // add event listener for close icon to close menu + this.mobileMenuCloseButton.addEventListener('click', this.closeMobileMenu.bind(this)) + } + + /** + * Handle menu button click + * + * Toggles the mobile menu between open and closed + */ + toggleMobileMenu() { + if (this.menuIsOpen) { + this.closeMobileMenu() + } else { + this.openMobileMenu() + } + } + + /** + * Update nav for the available space + * + * If the available space is less than the current breakpoint, + * add the mobile menu toggle button and move the last + * item in the list to the drop-down list. + * + * If the available space is greater than the current breakpoint, + * remove the mobile menu toggle button and move the first item in the + * + * Additionaly will close the mobile menu if the window gets resized + * and the menu is open. + */ + + updateNavigation() { + const availableSpace = this.navigation.offsetWidth + let itemsVisible = this.navigationList.children.length + + if (availableSpace < this.breakpoints[itemsVisible - 1]) { + this.mobileMenuToggleButton.classList.add('nhsuk-header__menu-toggle--visible') + this.mobileMenuContainer.classList.add('nhsuk-mobile-menu-container--visible') + if (itemsVisible === 2) { + return + } + while (availableSpace < this.breakpoints[itemsVisible - 1]) { + this.mobileMenu.insertBefore(this.navigationList.children[itemsVisible - 2], this.mobileMenu.firstChild) + itemsVisible -= 1 + } + } else if (availableSpace > this.breakpoints[itemsVisible]) { + while (availableSpace > this.breakpoints[itemsVisible]) { + this.navigationList.insertBefore( + this.mobileMenu.removeChild(this.mobileMenu.firstChild), + this.mobileMenuContainer + ) + itemsVisible += 1 + } + } + + if (!this.mobileMenu.children.length) { + this.mobileMenuToggleButton.classList.remove('nhsuk-header__menu-toggle--visible') + this.mobileMenuContainer.classList.remove('nhsuk-mobile-menu-container--visible') + } + + if (document.body.offsetWidth !== this.width && this.menuIsOpen) { + this.closeMobileMenu() + } + } + + /** + * Orientation change + * + * Check the orientation of the device, if changed it will trigger a + * update to the breakpoints and navigation. + */ + doOnOrientationChange() { + switch (window.orientation) { + case 90: + setTimeout(() => { + this.calculateBreakpoints() + this.updateNavigation() + }, 200) + break + default: + break + } + } +} export default () => { - MenuToggle() - SearchToggle() + new Header().init() } diff --git a/packages/components/header/header.test.js b/packages/components/header/header.test.js deleted file mode 100644 index 8d54817a9..000000000 --- a/packages/components/header/header.test.js +++ /dev/null @@ -1,9 +0,0 @@ -import Header from './header' - -describe('NHS.UK header()', () => { - describe('Does not throw an error', () => { - it('if no document exists', () => { - Header() - }) - }) -}) diff --git a/packages/components/header/menuToggle.js b/packages/components/header/menuToggle.js deleted file mode 100644 index 045faa3a9..000000000 --- a/packages/components/header/menuToggle.js +++ /dev/null @@ -1,32 +0,0 @@ -import { toggleAttribute } from '../../common' - -/** - * Handle menu show and hide for mobile - */ -export default () => { - // HTMLElements - const toggleButton = document.querySelector('#toggle-menu') - const closeButton = document.querySelector('#close-menu') - const nav = document.querySelector('#header-navigation') - - /** - * Toggle classes and attributes - * @param {Object} event click event object - */ - const toggleMenu = (event) => { - event.preventDefault() - // Toggle aria-expanded for accessibility - toggleAttribute(toggleButton, 'aria-expanded') - // Toggle classes to apply CSS - toggleButton.classList.toggle('is-active') - nav.classList.toggle('js-show') - } - - // Check all necessary HTMLElements exist - if (toggleButton && closeButton && nav) { - // Attach toggleMenu as click to any elements which need it - ;[toggleButton, closeButton].forEach((elem) => { - elem.addEventListener('click', toggleMenu) - }) - } -} diff --git a/packages/components/header/menuToggle.test.js b/packages/components/header/menuToggle.test.js deleted file mode 100644 index d4e35064e..000000000 --- a/packages/components/header/menuToggle.test.js +++ /dev/null @@ -1,85 +0,0 @@ -import MenuToggle from './menuToggle' - -// Mock HTML -const toggleButtonHtml = - '' -const closeButtonHtml = - '' -const navHtml = - '' - -// DOM Elements to be set -let toggleButton -let closeButton -let nav - -// Helper to set DOM Elements -const initTest = (html) => { - document.body.innerHTML = html || toggleButtonHtml + closeButtonHtml + navHtml - toggleButton = document.querySelector('.nhsuk-header__menu-toggle') - closeButton = document.querySelector('.nhsuk-header__navigation-close') - nav = document.querySelector('.nhsuk-header__navigation') - MenuToggle() -} - -describe('NHS.UK menuToggle()', () => { - describe('does not throw an error', () => { - it('if no elements exists', () => { - MenuToggle() - }) - it('if no toggleButton exists', () => { - initTest(closeButtonHtml + navHtml) - expect(toggleButton).toBeNull() - expect(closeButton).toBeDefined() - expect(nav).toBeDefined() - }) - - it('if no closeButton exists', () => { - initTest(toggleButtonHtml + navHtml) - expect(toggleButton).toBeDefined() - expect(closeButton).toBeNull() - expect(nav).toBeDefined() - }) - - it('if no nav exists', () => { - initTest(toggleButtonHtml + closeButtonHtml) - expect(toggleButton).toBeDefined() - expect(closeButton).toBeDefined() - expect(nav).toBeNull() - }) - }) - - describe('Adds correct classes to elements', () => { - it('when toggleButton is clicked for the first time', () => { - initTest() - toggleButton.click() - expect(toggleButton.getAttribute('aria-expanded')).toEqual('true') - expect(toggleButton.classList.contains('is-active')).toEqual(true) - expect(nav.classList.contains('js-show')).toEqual(true) - }) - - it('when toggleButton is clicked twice', () => { - initTest() - toggleButton.click() - expect(toggleButton.getAttribute('aria-expanded')).toEqual('true') - expect(toggleButton.classList.contains('is-active')).toEqual(true) - expect(nav.classList.contains('js-show')).toEqual(true) - toggleButton.click() - expect(toggleButton.getAttribute('aria-expanded')).toEqual('false') - expect(toggleButton.classList.contains('is-active')).toEqual(false) - expect(nav.classList.contains('js-show')).toEqual(false) - }) - - it('when toggleButton is clicked then closeButton is clicked', () => { - initTest() - toggleButton.click() - expect(toggleButton.getAttribute('aria-expanded')).toEqual('true') - expect(toggleButton.classList.contains('is-active')).toEqual(true) - expect(nav.classList.contains('js-show')).toEqual(true) - closeButton.click() - expect(toggleButton.getAttribute('aria-expanded')).toEqual('false') - expect(toggleButton.classList.contains('is-active')).toEqual(false) - expect(nav.classList.contains('js-show')).toEqual(false) - }) - }) -}) diff --git a/packages/components/header/searchToggle.js b/packages/components/header/searchToggle.js deleted file mode 100644 index 10a67ba2d..000000000 --- a/packages/components/header/searchToggle.js +++ /dev/null @@ -1,34 +0,0 @@ -import { toggleAttribute } from '../../common' - -/** - * Handle search show and hide for mobile - */ -export default () => { - // HTMLElements - const toggleButton = document.querySelector('#toggle-search') - const closeButton = document.querySelector('#close-search') - const searchContainer = document.querySelector('#wrap-search') - const menuSearchContainer = document.querySelector('#content-header') - - /** - * Toggle classes and attributes - * @param {Object} event click event object - */ - const toggleSearch = (event) => { - event.preventDefault() - // Toggle aria-expanded for accessibility - toggleAttribute(toggleButton, 'aria-expanded') - // Toggle classes to apply CSS - toggleButton.classList.toggle('is-active') - searchContainer.classList.toggle('js-show') - menuSearchContainer.classList.toggle('js-show') - } - - // Check all necessary HTMLElements exist - if (toggleButton && closeButton) { - // Attach toggleSearch as click to any elements which need it - ;[toggleButton, closeButton].forEach((elem) => { - elem.addEventListener('click', toggleSearch) - }) - } -} diff --git a/packages/components/header/template.njk b/packages/components/header/template.njk index a8aefc21d..ff7efbeb0 100644 --- a/packages/components/header/template.njk +++ b/packages/components/header/template.njk @@ -10,16 +10,19 @@ {% endset %} + \ No newline at end of file diff --git a/packages/core/settings/_colours.scss b/packages/core/settings/_colours.scss index c3a5df2dd..89a37dc36 100644 --- a/packages/core/settings/_colours.scss +++ b/packages/core/settings/_colours.scss @@ -103,6 +103,8 @@ $color_transparent_nhsuk-blue-50: rgba($color_shade_nhsuk-blue-50, 0.1); $nhsuk-text-color: $color_nhsuk-black; $nhsuk-secondary-text-color: $color_nhsuk-grey-1; $nhsuk-print-text-color: $color_nhsuk-black; +$nhsuk-footer-link-text-color: #003087; +$nhsuk-footer-copyright-text-color: #231f20; // Links $nhsuk-link-color: $color_nhsuk-blue; diff --git a/packages/core/styles/_icons.scss b/packages/core/styles/_icons.scss index 5d94ab180..a05fa7ceb 100644 --- a/packages/core/styles/_icons.scss +++ b/packages/core/styles/_icons.scss @@ -48,15 +48,12 @@ } .nhsuk-icon__chevron-down { - fill: $color_nhsuk-blue; - -moz-transform: rotate(180deg); - -ms-transform: rotate(180deg); - -o-transform: rotate(180deg); - -webkit-transform: rotate(180deg); - transform: rotate(180deg); - path { - fill: $color_nhsuk-white; - } + fill: $color_nhsuk-white; + height: 24px; + position: absolute; + right: 4px; + transform: rotate(90deg); + width: 24px; } .nhsuk-icon__chevron-up { diff --git a/packages/core/tools/_mixins.scss b/packages/core/tools/_mixins.scss index 1eb3fc529..6febbbde5 100644 --- a/packages/core/tools/_mixins.scss +++ b/packages/core/tools/_mixins.scss @@ -248,89 +248,6 @@ } } -// -// Toggle button mixin -// used to toggle content -// -// Usage: @include toggle-button(); -// See components/header -// -// 1. Remove inner border on buttons for Firefox, see -// https://github.com/necolas/normalize.css/issues/393 -// 2. !important overrides focus style border: 0; -// - -@mixin toggle-button() { - background-color: transparent; - border: 1px solid $color_nhsuk-white; - border-radius: $nhsuk-border-radius; - color: $color_nhsuk-white; - cursor: pointer; - - &::-moz-focus-inner { - border: 0; // [1] // - } - - &:hover { - background-color: $color_shade_nhsuk-blue-35; - border-color: $color_nhsuk-grey-5; - box-shadow: none; - } - - &:focus { - border: 1px solid $nhsuk-focus-color !important; /* stylelint-disable-line declaration-no-important */ /* [2] */ - } - - &:active, - &.is-active { - background-color: $color_shade_nhsuk-blue-50; - border-color: $color_nhsuk-grey-5; - color: $color_nhsuk-grey-5; - } -} - -// -// Close button mixin -// used to close a content area -// -// Usage: @include close-button(); -// See components/header -// -// 1. Custom height and width of form items -// 2. Custom height and width of svg icons -// 3. Remove inner border on buttons for Firefox, see -// https://github.com/necolas/normalize.css/issues/393 -// - -@mixin close-button() { - background-color: transparent; - border: 0; - cursor: pointer; - height: 40px; // [1] // - padding: 0; - width: 40px; // [1] // - - .nhsuk-icon__close { - fill: $color_nhsuk-blue; - height: 40px; // [2] // - width: 40px; // [2] // - } - - &::-moz-focus-inner { - border: 0; // [3] // - } - - &:hover { - .nhsuk-icon__close { - fill: $nhsuk-secondary-button-hover-color; - } - } - - &:focus { - @include nhsuk-focused-text; - } -} - // // Remove margin mobile mixin, removes left and right // margin at tablet breakpoint. diff --git a/packages/nhsuk.scss b/packages/nhsuk.scss index 07bdd5016..9c347aadc 100644 --- a/packages/nhsuk.scss +++ b/packages/nhsuk.scss @@ -16,6 +16,10 @@ @import "components/fieldset/fieldset"; @import "components/footer/footer"; @import "components/header/header"; +@import "components/header/header-organisation"; +@import "components/header/header-service"; +@import "components/header/header-transactional"; +@import "components/header/header-white"; @import "components/hero/hero"; @import "components/hint/hint"; @import "components/images/images"; diff --git a/tests/backstop/backstop.js b/tests/backstop/backstop.js index a2f0cd979..c0026b1a0 100644 --- a/tests/backstop/backstop.js +++ b/tests/backstop/backstop.js @@ -197,9 +197,13 @@ module.exports = { url: `${TEST_URL}/details/expander-group.html`, }, { - label: 'Footer', + label: 'Footer (default)', url: `${TEST_URL}/footer/index.html`, }, + { + label: 'Footer (columns)', + url: `${TEST_URL}/footer/footer-in-columns.html`, + }, { label: 'Fieldset', url: `${TEST_URL}/fieldset/index.html`, @@ -213,9 +217,17 @@ module.exports = { url: `${TEST_URL}/fieldset/with-inputs.html`, }, { - label: 'Header', + label: 'Header (default)', url: `${TEST_URL}/header/index.html`, }, + { + label: 'Header with navigation', + url: `${TEST_URL}/header/header-navigation.html`, + }, + { + label: 'Header with search', + url: `${TEST_URL}/header/header-search.html`, + }, { label: 'Header with logo only', url: `${TEST_URL}/header/header-logo.html`, @@ -228,17 +240,21 @@ module.exports = { label: 'Header with a service name, search and navigation', url: `${TEST_URL}/header/header-service-name-with-nav.html`, }, - { - label: 'Header transactional', - url: `${TEST_URL}/header/header-transactional.html`, - }, { label: 'Header transactional with service name', url: `${TEST_URL}/header/header-transactional-service-name.html`, }, { - label: 'Header with navigation', - url: `${TEST_URL}/header/header-navigation.html`, + label: 'Header organisational', + url: `${TEST_URL}/header/header-org.html`, + }, + { + label: 'Header organisational with white header', + url: `${TEST_URL}/header/header-org-white.html`, + }, + { + label: 'Header organisational with white header and navigation', + url: `${TEST_URL}/header/header-org-white-nav.html`, }, { clickSelector: '#toggle-menu', @@ -262,39 +278,6 @@ module.exports = { }, ], }, - { - label: 'Header with search', - url: `${TEST_URL}/header/header-search.html`, - }, - { - clickSelector: '#toggle-search', - label: 'Header with search open', - url: `${TEST_URL}/header/header-search.html`, - viewports: [ - { - height: 568, - label: 'iPhone 5/SE', - width: 320, - }, - { - height: 667, - label: 'iPhone 6-8', - width: 375, - }, - ], - }, - { - label: 'Header organisational', - url: `${TEST_URL}/header/header-org.html`, - }, - { - label: 'Header organisational with white header', - url: `${TEST_URL}/header/header-org-white.html`, - }, - { - label: 'Header organisational with white header and navigation', - url: `${TEST_URL}/header/header-org-white-nav.html`, - }, { label: 'Hero', url: `${TEST_URL}/hero/index.html`, diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_columns_0_document_0_iPhone_5_SE.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_columns_0_document_0_iPhone_5_SE.png new file mode 100644 index 000000000..e35358e2c Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_columns_0_document_0_iPhone_5_SE.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_columns_0_document_1_iPhone_6-8.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_columns_0_document_1_iPhone_6-8.png new file mode 100644 index 000000000..790c1f468 Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_columns_0_document_1_iPhone_6-8.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_columns_0_document_2_iPad.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_columns_0_document_2_iPad.png new file mode 100644 index 000000000..cb149fddf Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_columns_0_document_2_iPad.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_columns_0_document_3_Surface_iPad_Pro.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_columns_0_document_3_Surface_iPad_Pro.png new file mode 100644 index 000000000..a77ff7a19 Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_columns_0_document_3_Surface_iPad_Pro.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_default_0_document_0_iPhone_5_SE.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_default_0_document_0_iPhone_5_SE.png new file mode 100644 index 000000000..da63c0803 Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_default_0_document_0_iPhone_5_SE.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_default_0_document_1_iPhone_6-8.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_default_0_document_1_iPhone_6-8.png new file mode 100644 index 000000000..d722c2a32 Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_default_0_document_1_iPhone_6-8.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_default_0_document_2_iPad.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_default_0_document_2_iPad.png new file mode 100644 index 000000000..42e5057a0 Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_default_0_document_2_iPad.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_default_0_document_3_Surface_iPad_Pro.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_default_0_document_3_Surface_iPad_Pro.png new file mode 100644 index 000000000..be577e2e6 Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_default_0_document_3_Surface_iPad_Pro.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_columns_0_document_0_iPhone_5_SE.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_columns_0_document_0_iPhone_5_SE.png new file mode 100644 index 000000000..e35358e2c Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_columns_0_document_0_iPhone_5_SE.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_columns_0_document_1_iPhone_6-8.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_columns_0_document_1_iPhone_6-8.png new file mode 100644 index 000000000..790c1f468 Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_columns_0_document_1_iPhone_6-8.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_columns_0_document_2_iPad.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_columns_0_document_2_iPad.png new file mode 100644 index 000000000..cb149fddf Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_columns_0_document_2_iPad.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_columns_0_document_3_Surface_iPad_Pro.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_columns_0_document_3_Surface_iPad_Pro.png new file mode 100644 index 000000000..a77ff7a19 Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_columns_0_document_3_Surface_iPad_Pro.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_default_0_document_0_iPhone_5_SE.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_default_0_document_0_iPhone_5_SE.png new file mode 100644 index 000000000..da63c0803 Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_default_0_document_0_iPhone_5_SE.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_default_0_document_1_iPhone_6-8.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_default_0_document_1_iPhone_6-8.png new file mode 100644 index 000000000..d722c2a32 Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_default_0_document_1_iPhone_6-8.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_default_0_document_2_iPad.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_default_0_document_2_iPad.png new file mode 100644 index 000000000..42e5057a0 Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_default_0_document_2_iPad.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_default_0_document_3_Surface_iPad_Pro.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_default_0_document_3_Surface_iPad_Pro.png new file mode 100644 index 000000000..be577e2e6 Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Footer_without_bottom_border_default_0_document_3_Surface_iPad_Pro.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_default_0_document_0_iPhone_5_SE.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_default_0_document_0_iPhone_5_SE.png new file mode 100644 index 000000000..44be54faf Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_default_0_document_0_iPhone_5_SE.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_default_0_document_1_iPhone_6-8.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_default_0_document_1_iPhone_6-8.png new file mode 100644 index 000000000..bab041c0c Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_default_0_document_1_iPhone_6-8.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_default_0_document_2_iPad.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_default_0_document_2_iPad.png new file mode 100644 index 000000000..dec8c8bae Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_default_0_document_2_iPad.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_default_0_document_3_Surface_iPad_Pro.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_default_0_document_3_Surface_iPad_Pro.png new file mode 100644 index 000000000..f75ba6381 Binary files /dev/null and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_default_0_document_3_Surface_iPad_Pro.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_0_document_0_iPhone_5_SE.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_0_document_0_iPhone_5_SE.png index de8fc0518..4809905b8 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_0_document_0_iPhone_5_SE.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_0_document_0_iPhone_5_SE.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_0_document_1_iPhone_6-8.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_0_document_1_iPhone_6-8.png index 50195885b..24dab4e0c 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_0_document_1_iPhone_6-8.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_0_document_1_iPhone_6-8.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_0_document_2_iPad.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_0_document_2_iPad.png index 19ac91a2e..753398a28 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_0_document_2_iPad.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_0_document_2_iPad.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_0_document_3_Surface_iPad_Pro.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_0_document_3_Surface_iPad_Pro.png index 846735ad4..d457cb508 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_0_document_3_Surface_iPad_Pro.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_0_document_3_Surface_iPad_Pro.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_0_document_0_iPhone_5_SE.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_0_document_0_iPhone_5_SE.png index 4ce1c1fad..c86167a0e 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_0_document_0_iPhone_5_SE.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_0_document_0_iPhone_5_SE.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_0_document_1_iPhone_6-8.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_0_document_1_iPhone_6-8.png index bb0404dbd..05569a975 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_0_document_1_iPhone_6-8.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_0_document_1_iPhone_6-8.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_0_document_2_iPad.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_0_document_2_iPad.png index ecab7ac48..705de3323 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_0_document_2_iPad.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_0_document_2_iPad.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_0_document_3_Surface_iPad_Pro.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_0_document_3_Surface_iPad_Pro.png index ec1b63bef..8cb862ce8 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_0_document_3_Surface_iPad_Pro.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_0_document_3_Surface_iPad_Pro.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_and_navigation_0_document_0_iPhone_5_SE.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_and_navigation_0_document_0_iPhone_5_SE.png index 4ce1c1fad..eff068fb3 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_and_navigation_0_document_0_iPhone_5_SE.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_and_navigation_0_document_0_iPhone_5_SE.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_and_navigation_0_document_1_iPhone_6-8.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_and_navigation_0_document_1_iPhone_6-8.png index bb0404dbd..31c9910c8 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_and_navigation_0_document_1_iPhone_6-8.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_and_navigation_0_document_1_iPhone_6-8.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_and_navigation_0_document_2_iPad.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_and_navigation_0_document_2_iPad.png index ecab7ac48..f5f06da17 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_and_navigation_0_document_2_iPad.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_and_navigation_0_document_2_iPad.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_and_navigation_0_document_3_Surface_iPad_Pro.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_and_navigation_0_document_3_Surface_iPad_Pro.png index 3be4c2c1d..b666cf6fd 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_and_navigation_0_document_3_Surface_iPad_Pro.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_organisational_with_white_header_and_navigation_0_document_3_Surface_iPad_Pro.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_transactional_with_service_name_0_document_0_iPhone_5_SE.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_transactional_with_service_name_0_document_0_iPhone_5_SE.png index c8180ca60..1283e46d2 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_transactional_with_service_name_0_document_0_iPhone_5_SE.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_transactional_with_service_name_0_document_0_iPhone_5_SE.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_transactional_with_service_name_0_document_1_iPhone_6-8.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_transactional_with_service_name_0_document_1_iPhone_6-8.png index d57abd04f..b2b74b1ab 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_transactional_with_service_name_0_document_1_iPhone_6-8.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_transactional_with_service_name_0_document_1_iPhone_6-8.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_transactional_with_service_name_0_document_2_iPad.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_transactional_with_service_name_0_document_2_iPad.png index 4e2c373ec..70f14eb26 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_transactional_with_service_name_0_document_2_iPad.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_transactional_with_service_name_0_document_2_iPad.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_transactional_with_service_name_0_document_3_Surface_iPad_Pro.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_transactional_with_service_name_0_document_3_Surface_iPad_Pro.png index 1d73d78e1..bfb88ba93 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_transactional_with_service_name_0_document_3_Surface_iPad_Pro.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_transactional_with_service_name_0_document_3_Surface_iPad_Pro.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_0_document_0_iPhone_5_SE.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_0_document_0_iPhone_5_SE.png index ece7cd03c..f0e01a0d0 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_0_document_0_iPhone_5_SE.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_0_document_0_iPhone_5_SE.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_0_document_1_iPhone_6-8.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_0_document_1_iPhone_6-8.png index 146f4e93b..071755153 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_0_document_1_iPhone_6-8.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_0_document_1_iPhone_6-8.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_0_document_2_iPad.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_0_document_2_iPad.png index 989cfbd8a..1b692742f 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_0_document_2_iPad.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_0_document_2_iPad.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_0_document_3_Surface_iPad_Pro.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_0_document_3_Surface_iPad_Pro.png index c4149a8fd..c4361de78 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_0_document_3_Surface_iPad_Pro.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_0_document_3_Surface_iPad_Pro.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_search_and_navigation_0_document_0_iPhone_5_SE.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_search_and_navigation_0_document_0_iPhone_5_SE.png index 2345cd9cb..eadb3c540 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_search_and_navigation_0_document_0_iPhone_5_SE.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_search_and_navigation_0_document_0_iPhone_5_SE.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_search_and_navigation_0_document_1_iPhone_6-8.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_search_and_navigation_0_document_1_iPhone_6-8.png index 374f837f5..f47c8dcbc 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_search_and_navigation_0_document_1_iPhone_6-8.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_search_and_navigation_0_document_1_iPhone_6-8.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_search_and_navigation_0_document_2_iPad.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_search_and_navigation_0_document_2_iPad.png index 2186e709d..09d3427e3 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_search_and_navigation_0_document_2_iPad.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_search_and_navigation_0_document_2_iPad.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_search_and_navigation_0_document_3_Surface_iPad_Pro.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_search_and_navigation_0_document_3_Surface_iPad_Pro.png index 080f2febb..be876c3c6 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_search_and_navigation_0_document_3_Surface_iPad_Pro.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_a_service_name_search_and_navigation_0_document_3_Surface_iPad_Pro.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_logo_only_0_document_0_iPhone_5_SE.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_logo_only_0_document_0_iPhone_5_SE.png index 766479e01..9a5bc7f36 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_logo_only_0_document_0_iPhone_5_SE.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_logo_only_0_document_0_iPhone_5_SE.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_logo_only_0_document_1_iPhone_6-8.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_logo_only_0_document_1_iPhone_6-8.png index 24906ee66..5d1ec01c9 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_logo_only_0_document_1_iPhone_6-8.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_logo_only_0_document_1_iPhone_6-8.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_logo_only_0_document_2_iPad.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_logo_only_0_document_2_iPad.png index c9d05ce51..1942740b6 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_logo_only_0_document_2_iPad.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_logo_only_0_document_2_iPad.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_logo_only_0_document_3_Surface_iPad_Pro.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_logo_only_0_document_3_Surface_iPad_Pro.png index f85e4e5f9..c0b42811a 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_logo_only_0_document_3_Surface_iPad_Pro.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_logo_only_0_document_3_Surface_iPad_Pro.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_navigation_0_document_0_iPhone_5_SE.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_navigation_0_document_0_iPhone_5_SE.png index db3981e7f..d24ce3ddb 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_navigation_0_document_0_iPhone_5_SE.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_navigation_0_document_0_iPhone_5_SE.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_navigation_0_document_1_iPhone_6-8.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_navigation_0_document_1_iPhone_6-8.png index dacbc46f9..a023cff2c 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_navigation_0_document_1_iPhone_6-8.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_navigation_0_document_1_iPhone_6-8.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_navigation_0_document_2_iPad.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_navigation_0_document_2_iPad.png index a46108040..4a6ce109c 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_navigation_0_document_2_iPad.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_navigation_0_document_2_iPad.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_navigation_0_document_3_Surface_iPad_Pro.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_navigation_0_document_3_Surface_iPad_Pro.png index 89cf51aad..77322f4de 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_navigation_0_document_3_Surface_iPad_Pro.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_navigation_0_document_3_Surface_iPad_Pro.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_search_0_document_0_iPhone_5_SE.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_search_0_document_0_iPhone_5_SE.png index 2466882cf..d08db65f6 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_search_0_document_0_iPhone_5_SE.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_search_0_document_0_iPhone_5_SE.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_search_0_document_1_iPhone_6-8.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_search_0_document_1_iPhone_6-8.png index b181ecedb..582fdc905 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_search_0_document_1_iPhone_6-8.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_search_0_document_1_iPhone_6-8.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_search_0_document_2_iPad.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_search_0_document_2_iPad.png index a3e000d25..98a5987d8 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_search_0_document_2_iPad.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_search_0_document_2_iPad.png differ diff --git a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_search_0_document_3_Surface_iPad_Pro.png b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_search_0_document_3_Surface_iPad_Pro.png index 7b58d1353..9d3be2a55 100644 Binary files a/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_search_0_document_3_Surface_iPad_Pro.png and b/tests/backstop/bitmaps_reference/nhsuk-frontend_Header_with_search_0_document_3_Surface_iPad_Pro.png differ diff --git a/tests/integration/jsdom/searchToggle.test.js b/tests/integration/jsdom/searchToggle.test.js deleted file mode 100644 index 363df28b5..000000000 --- a/tests/integration/jsdom/searchToggle.test.js +++ /dev/null @@ -1,98 +0,0 @@ -import SearchToggle from '../../../packages/components/header/searchToggle' - -const toggleButtonHtml = - '' -const closeButtonHtml = - '' -const searchContainerHtml = '' -const menuSearchContainerHtml = '
    ' - -// DOM Elements to be set -let toggleButton -let closeButton -let searchContainer -let menuSearchContainer - -// Helper to set DOM Elements -const initTest = (html) => { - document.body.innerHTML = html || toggleButtonHtml + closeButtonHtml + searchContainerHtml + menuSearchContainerHtml - toggleButton = document.querySelector('#toggle-search') - closeButton = document.querySelector('#close-search') - searchContainer = document.querySelector('#wrap-search') - menuSearchContainer = document.querySelector('#content-header') - SearchToggle() -} - -describe('NHS.UK menuToggle()', () => { - describe('Does not throw an error', () => { - it('if no document exists', () => { - SearchToggle() - }) - it('if no toggleButton exists', () => { - initTest(closeButtonHtml + searchContainerHtml + menuSearchContainerHtml) - expect(toggleButton).toBeNull() - expect(closeButton).toBeDefined() - expect(searchContainerHtml).toBeDefined() - expect(menuSearchContainerHtml).toBeDefined() - }) - - it('if no closeButton exists', () => { - initTest(toggleButtonHtml + searchContainerHtml + menuSearchContainerHtml) - expect(toggleButton).toBeDefined() - expect(closeButton).toBeNull() - expect(searchContainerHtml).toBeDefined() - expect(menuSearchContainerHtml).toBeDefined() - }) - - it('if no searchContainerHtml exists', () => { - initTest(toggleButtonHtml + closeButtonHtml + menuSearchContainerHtml) - expect(toggleButton).toBeDefined() - expect(closeButton).toBeDefined() - expect(searchContainer).toBeNull() - expect(menuSearchContainer).toBeDefined() - }) - - it('if no menuSearchContainerHtml exists', () => { - initTest(toggleButtonHtml + closeButtonHtml + searchContainerHtml) - expect(toggleButton).toBeDefined() - expect(closeButton).toBeDefined() - expect(searchContainer).toBeDefined() - expect(menuSearchContainer).toBeNull() - }) - }) - - describe('Adds correct classes and attributes to elements', () => { - it('when toggleButton is clicked for the first time', () => { - initTest() - toggleButton.click() - expect(toggleButton.getAttribute('aria-expanded')).toEqual('true') - expect(toggleButton.classList.contains('is-active')).toEqual(true) - expect(searchContainer.classList.contains('js-show')).toEqual(true) - expect(menuSearchContainer.classList.contains('js-show')).toEqual(true) - }) - - it('when toggleButton is clicked twice', () => { - initTest() - toggleButton.click() - expect(toggleButton.getAttribute('aria-expanded')).toEqual('true') - expect(searchContainer.classList.contains('js-show')).toEqual(true) - expect(menuSearchContainer.classList.contains('js-show')).toEqual(true) - toggleButton.click() - expect(toggleButton.getAttribute('aria-expanded')).toEqual('false') - expect(searchContainer.classList.contains('js-show')).toEqual(false) - expect(menuSearchContainer.classList.contains('js-show')).toEqual(false) - }) - - it('when toggleButton is clicked then closeButton is clicked', () => { - initTest() - toggleButton.click() - expect(toggleButton.getAttribute('aria-expanded')).toEqual('true') - expect(searchContainer.classList.contains('js-show')).toEqual(true) - expect(menuSearchContainer.classList.contains('js-show')).toEqual(true) - closeButton.click() - expect(toggleButton.getAttribute('aria-expanded')).toEqual('false') - expect(searchContainer.classList.contains('js-show')).toEqual(false) - expect(menuSearchContainer.classList.contains('js-show')).toEqual(false) - }) - }) -})