govuk_tech_docs 3.4.5 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/publish.yaml +8 -4
- data/.github/workflows/test.yaml +11 -4
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +22 -1
- data/example/.ruby-version +1 -1
- data/example/source/javascripts/govuk_frontend.js +1 -0
- data/govuk_tech_docs.gemspec +17 -11
- data/lib/assets/javascripts/_modules/page-expiry.js +2 -2
- data/lib/assets/javascripts/_modules/table-of-contents.js +48 -2
- data/lib/assets/javascripts/govuk_frontend_all.js +3 -0
- data/lib/assets/javascripts/govuk_tech_docs.js +0 -2
- data/lib/assets/stylesheets/_govuk_tech_docs.scss +4 -10
- data/lib/assets/stylesheets/modules/_page-review.scss +0 -2
- data/lib/assets/stylesheets/modules/_search.scss +0 -4
- data/lib/govuk_tech_docs/meta_tags.rb +1 -1
- data/lib/govuk_tech_docs/redirects.rb +1 -1
- data/lib/govuk_tech_docs/table_of_contents/heading_tree_builder.rb +1 -1
- data/lib/govuk_tech_docs/table_of_contents/helpers.rb +2 -2
- data/lib/govuk_tech_docs/tech_docs_html_renderer.rb +6 -2
- data/lib/govuk_tech_docs/version.rb +1 -1
- data/lib/govuk_tech_docs.rb +20 -3
- data/lib/source/layouts/_header.erb +8 -12
- data/lib/source/layouts/_page_review.erb +1 -1
- data/lib/source/layouts/_search.erb +2 -2
- data/lib/source/layouts/core.erb +8 -2
- data/lib/source/stylesheets/manifest.css +1 -1
- data/node_modules/govuk-frontend/dist/govuk/_base.scss +5 -0
- data/node_modules/govuk-frontend/dist/govuk/all.bundle.js +2554 -0
- data/node_modules/govuk-frontend/dist/govuk/all.bundle.mjs +2529 -0
- data/node_modules/govuk-frontend/dist/govuk/all.mjs +18 -0
- data/node_modules/govuk-frontend/dist/govuk/all.scss +3 -0
- data/node_modules/govuk-frontend/dist/govuk/assets/images/favicon.svg +1 -0
- data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-crest.svg +1 -0
- data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-icon-180.png +0 -0
- data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-icon-192.png +0 -0
- data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-icon-512.png +0 -0
- data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-icon-mask.svg +1 -0
- data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-opengraph-image.png +0 -0
- data/node_modules/govuk-frontend/dist/govuk/common/closest-attribute-value.mjs +7 -0
- data/node_modules/govuk-frontend/dist/govuk/common/govuk-frontend-version.mjs +4 -0
- data/node_modules/govuk-frontend/dist/govuk/common/index.mjs +159 -0
- data/node_modules/govuk-frontend/dist/govuk/common/normalise-dataset.mjs +18 -0
- data/node_modules/govuk-frontend/dist/govuk/common/normalise-string.mjs +31 -0
- data/node_modules/govuk-frontend/dist/govuk/components/_all.scss +10 -0
- data/node_modules/govuk-frontend/{govuk/components/_all.scss → dist/govuk/components/_index.scss} +8 -3
- data/node_modules/govuk-frontend/dist/govuk/components/accordion/_accordion.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/accordion/_index.scss +55 -77
- data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.js +785 -0
- data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.mjs +777 -0
- data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.mjs +349 -0
- data/node_modules/govuk-frontend/dist/govuk/components/back-link/_back-link.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/back-link/_index.scss +12 -36
- data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/_breadcrumbs.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/breadcrumbs/_index.scss +11 -36
- data/node_modules/govuk-frontend/dist/govuk/components/button/_button.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/button/_index.scss +30 -103
- data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.js +318 -0
- data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.mjs +310 -0
- data/node_modules/govuk-frontend/dist/govuk/components/button/button.mjs +73 -0
- data/node_modules/govuk-frontend/dist/govuk/components/character-count/_character-count.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/character-count/_index.scss +8 -6
- data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.js +761 -0
- data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.mjs +753 -0
- data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.mjs +295 -0
- data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/_checkboxes.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/checkboxes/_index.scss +108 -132
- data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.js +268 -0
- data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.mjs +260 -0
- data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.mjs +111 -0
- data/node_modules/govuk-frontend/dist/govuk/components/cookie-banner/_cookie-banner.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/cookie-banner/_index.scss +19 -15
- data/node_modules/govuk-frontend/dist/govuk/components/date-input/_date-input.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/date-input/_index.scss +3 -2
- data/node_modules/govuk-frontend/dist/govuk/components/details/_details.scss +4 -0
- data/node_modules/govuk-frontend/dist/govuk/components/details/_index.scss +139 -0
- data/node_modules/govuk-frontend/dist/govuk/components/error-message/_error-message.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/error-message/_index.scss +2 -0
- data/node_modules/govuk-frontend/dist/govuk/components/error-summary/_error-summary.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/error-summary/_index.scss +19 -6
- data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.js +378 -0
- data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.mjs +370 -0
- data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.mjs +103 -0
- data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/_exit-this-page.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/exit-this-page/_index.scss +5 -10
- data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.js +662 -0
- data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.mjs +654 -0
- data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.mjs +226 -0
- data/node_modules/govuk-frontend/dist/govuk/components/fieldset/_fieldset.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/fieldset/_index.scss +20 -15
- data/node_modules/govuk-frontend/dist/govuk/components/file-upload/_file-upload.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/file-upload/_index.scss +11 -15
- data/node_modules/govuk-frontend/dist/govuk/components/footer/_footer.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/footer/_index.scss +25 -68
- data/node_modules/govuk-frontend/dist/govuk/components/header/_header.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/header/_index.scss +84 -79
- data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.js +252 -0
- data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.mjs +244 -0
- data/node_modules/govuk-frontend/dist/govuk/components/header/header.mjs +88 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/hint/_hint.scss +2 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/hint/_index.scss +3 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/input/_index.scss +24 -49
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/input/_input.scss +2 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/inset-text/_index.scss +2 -0
- data/node_modules/govuk-frontend/dist/govuk/components/inset-text/_inset-text.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/label/_index.scss +12 -7
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/label/_label.scss +2 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/notification-banner/_index.scss +11 -7
- data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/_notification-banner.scss +4 -0
- data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.js +320 -0
- data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.mjs +312 -0
- data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.mjs +51 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/pagination/_index.scss +36 -55
- data/node_modules/govuk-frontend/dist/govuk/components/pagination/_pagination.scss +4 -0
- data/node_modules/govuk-frontend/dist/govuk/components/panel/_index.scss +58 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/panel/_panel.scss +2 -0
- data/node_modules/govuk-frontend/dist/govuk/components/password-input/_index.scss +57 -0
- data/node_modules/govuk-frontend/dist/govuk/components/password-input/_password-input.scss +4 -0
- data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.js +594 -0
- data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.mjs +586 -0
- data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.mjs +154 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/phase-banner/_index.scss +10 -1
- data/node_modules/govuk-frontend/dist/govuk/components/phase-banner/_phase-banner.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/radios/_index.scss +92 -113
- data/node_modules/govuk-frontend/dist/govuk/components/radios/_radios.scss +4 -0
- data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.js +245 -0
- data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.mjs +237 -0
- data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.mjs +88 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/select/_index.scss +9 -16
- data/node_modules/govuk-frontend/dist/govuk/components/select/_select.scss +4 -0
- data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/_index.scss +168 -0
- data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/_service-navigation.scss +4 -0
- data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.js +249 -0
- data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.mjs +241 -0
- data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.mjs +85 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/skip-link/_index.scss +10 -5
- data/node_modules/govuk-frontend/dist/govuk/components/skip-link/_skip-link.scss +4 -0
- data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.js +244 -0
- data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.mjs +236 -0
- data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.mjs +58 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/summary-list/_index.scss +22 -20
- data/node_modules/govuk-frontend/dist/govuk/components/summary-list/_summary-list.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/table/_index.scss +21 -17
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/table/_table.scss +2 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/tabs/_index.scss +13 -9
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/tabs/_tabs.scss +2 -0
- data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.js +453 -0
- data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.mjs +445 -0
- data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.mjs +283 -0
- data/node_modules/govuk-frontend/dist/govuk/components/tag/_index.scss +97 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/tag/_tag.scss +2 -0
- data/node_modules/govuk-frontend/dist/govuk/components/task-list/_index.scss +79 -0
- data/node_modules/govuk-frontend/dist/govuk/components/task-list/_task-list.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/textarea/_index.scss +6 -10
- data/node_modules/govuk-frontend/dist/govuk/components/textarea/_textarea.scss +4 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/warning-text/_index.scss +13 -13
- data/node_modules/govuk-frontend/dist/govuk/components/warning-text/_warning-text.scss +4 -0
- data/node_modules/govuk-frontend/dist/govuk/core/_all.scss +10 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/core/_global-styles.scss +2 -1
- data/node_modules/govuk-frontend/dist/govuk/core/_govuk-frontend-properties.scss +12 -0
- data/node_modules/govuk-frontend/{govuk/core/_all.scss → dist/govuk/core/_index.scss} +3 -1
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/core/_links.scss +8 -1
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/core/_lists.scss +2 -1
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/core/_section-break.scss +2 -7
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/core/_typography.scss +8 -5
- data/node_modules/govuk-frontend/dist/govuk/errors/index.mjs +57 -0
- data/node_modules/govuk-frontend/dist/govuk/govuk-frontend-component.mjs +60 -0
- data/node_modules/govuk-frontend/dist/govuk/govuk-frontend.min.js +1 -0
- data/node_modules/govuk-frontend/dist/govuk/helpers/_all.scss +10 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_clearfix.scss +3 -1
- data/node_modules/govuk-frontend/dist/govuk/helpers/_colour.scss +127 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_device-pixels.scss +4 -3
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_focused.scss +22 -6
- data/node_modules/govuk-frontend/dist/govuk/helpers/_font-faces.scss +41 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_grid.scss +3 -1
- data/node_modules/govuk-frontend/{govuk/helpers/_all.scss → dist/govuk/helpers/_index.scss} +2 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_links.scss +38 -76
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_media-queries.scss +3 -12
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_shape-arrow.scss +3 -1
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_spacing.scss +12 -10
- data/node_modules/govuk-frontend/dist/govuk/helpers/_typography.scss +288 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_visually-hidden.scss +39 -50
- data/node_modules/govuk-frontend/dist/govuk/i18n.mjs +195 -0
- data/node_modules/govuk-frontend/dist/govuk/index.scss +11 -0
- data/node_modules/govuk-frontend/dist/govuk/init.mjs +162 -0
- data/node_modules/govuk-frontend/dist/govuk/objects/_all.scss +10 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/objects/_button-group.scss +7 -12
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/objects/_form-group.scss +2 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/objects/_grid.scss +4 -2
- data/node_modules/govuk-frontend/{govuk/objects/_all.scss → dist/govuk/objects/_index.scss} +2 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/objects/_main-wrapper.scss +2 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/objects/_template.scss +2 -1
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/objects/_width-container.scss +2 -9
- data/node_modules/govuk-frontend/dist/govuk/overrides/_all.scss +9 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/overrides/_display.scss +2 -0
- data/node_modules/govuk-frontend/{govuk/overrides/_all.scss → dist/govuk/overrides/_index.scss} +2 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/overrides/_spacing.scss +3 -19
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/overrides/_text-align.scss +2 -0
- data/node_modules/govuk-frontend/dist/govuk/overrides/_typography.scss +42 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/overrides/_width.scss +2 -0
- data/node_modules/govuk-frontend/dist/govuk/settings/_all.scss +10 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_assets.scss +2 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_colours-applied.scss +9 -7
- data/node_modules/govuk-frontend/dist/govuk/settings/_colours-organisations.scss +378 -0
- data/node_modules/govuk-frontend/dist/govuk/settings/_colours-palette.scss +37 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_global-styles.scss +2 -0
- data/node_modules/govuk-frontend/{govuk/settings/_all.scss → dist/govuk/settings/_index.scss} +2 -3
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_links.scss +3 -20
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_measurements.scss +18 -6
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_media-queries.scss +5 -3
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_spacing.scss +2 -0
- data/node_modules/govuk-frontend/dist/govuk/settings/_typography-font.scss +52 -0
- data/node_modules/govuk-frontend/dist/govuk/settings/_typography-responsive.scss +322 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_warnings.scss +33 -8
- data/node_modules/govuk-frontend/dist/govuk/tools/_all.scss +10 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/tools/_exports.scss +2 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/tools/_font-url.scss +3 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/tools/_image-url.scss +3 -0
- data/node_modules/govuk-frontend/{govuk/tools/_all.scss → dist/govuk/tools/_index.scss} +2 -2
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/tools/_px-to-em.scss +2 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/tools/_px-to-rem.scss +2 -0
- data/node_modules/govuk-frontend/dist/govuk/utilities/_all.scss +10 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/utilities/_clearfix.scss +2 -0
- data/node_modules/govuk-frontend/{govuk/utilities/_all.scss → dist/govuk/utilities/_index.scss} +2 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/utilities/_visually-hidden.scss +2 -0
- data/node_modules/govuk-frontend/{govuk → dist/govuk}/vendor/_sass-mq.scss +3 -1
- data/node_modules/govuk-frontend/dist/govuk-prototype-kit/init.js +15 -0
- data/node_modules/govuk-frontend/{govuk-prototype-kit → dist/govuk-prototype-kit}/init.scss +3 -2
- data/package-lock.json +37 -37
- data/package.json +6 -1
- metadata +316 -206
- data/node_modules/govuk-frontend/govuk/_base.scss +0 -3
- data/node_modules/govuk-frontend/govuk/all-ie8.scss +0 -14
- data/node_modules/govuk-frontend/govuk/all.js +0 -5172
- data/node_modules/govuk-frontend/govuk/all.scss +0 -9
- data/node_modules/govuk-frontend/govuk/assets/images/favicon.ico +0 -0
- data/node_modules/govuk-frontend/govuk/assets/images/govuk-apple-touch-icon-152x152.png +0 -0
- data/node_modules/govuk-frontend/govuk/assets/images/govuk-apple-touch-icon-167x167.png +0 -0
- data/node_modules/govuk-frontend/govuk/assets/images/govuk-apple-touch-icon-180x180.png +0 -0
- data/node_modules/govuk-frontend/govuk/assets/images/govuk-apple-touch-icon.png +0 -0
- data/node_modules/govuk-frontend/govuk/assets/images/govuk-crest-2x.png +0 -0
- data/node_modules/govuk-frontend/govuk/assets/images/govuk-crest.png +0 -0
- data/node_modules/govuk-frontend/govuk/assets/images/govuk-logotype-crown.png +0 -0
- data/node_modules/govuk-frontend/govuk/assets/images/govuk-mask-icon.svg +0 -7
- data/node_modules/govuk-frontend/govuk/assets/images/govuk-opengraph-image.png +0 -0
- data/node_modules/govuk-frontend/govuk/common/closest-attribute-value.js +0 -75
- data/node_modules/govuk-frontend/govuk/common/govuk-frontend-version.js +0 -17
- data/node_modules/govuk-frontend/govuk/common/index.js +0 -192
- data/node_modules/govuk-frontend/govuk/common/normalise-dataset.js +0 -386
- data/node_modules/govuk-frontend/govuk/common.js +0 -194
- data/node_modules/govuk-frontend/govuk/components/accordion/_accordion.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/accordion/accordion.js +0 -2386
- data/node_modules/govuk-frontend/govuk/components/back-link/_back-link.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/breadcrumbs/_breadcrumbs.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/button/_button.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/button/button.js +0 -1027
- data/node_modules/govuk-frontend/govuk/components/character-count/_character-count.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/character-count/character-count.js +0 -2281
- data/node_modules/govuk-frontend/govuk/components/checkboxes/_checkboxes.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/checkboxes/checkboxes.js +0 -1277
- data/node_modules/govuk-frontend/govuk/components/cookie-banner/_cookie-banner.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/date-input/_date-input.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/details/_details.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/details/_index.scss +0 -88
- data/node_modules/govuk-frontend/govuk/components/details/details.js +0 -873
- data/node_modules/govuk-frontend/govuk/components/error-message/_error-message.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/error-summary/_error-summary.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/error-summary/error-summary.js +0 -1189
- data/node_modules/govuk-frontend/govuk/components/exit-this-page/_exit-this-page.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/exit-this-page/exit-this-page.js +0 -2120
- data/node_modules/govuk-frontend/govuk/components/fieldset/_fieldset.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/file-upload/_file-upload.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/footer/_footer.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/header/_header.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/header/header.js +0 -794
- data/node_modules/govuk-frontend/govuk/components/inset-text/_inset-text.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/notification-banner/_notification-banner.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/notification-banner/notification-banner.js +0 -843
- data/node_modules/govuk-frontend/govuk/components/pagination/_pagination.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/panel/_index.scss +0 -56
- data/node_modules/govuk-frontend/govuk/components/phase-banner/_phase-banner.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/radios/_radios.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/radios/radios.js +0 -1222
- data/node_modules/govuk-frontend/govuk/components/select/_select.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/skip-link/_skip-link.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/skip-link/skip-link.js +0 -1145
- data/node_modules/govuk-frontend/govuk/components/summary-list/_summary-list.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/tabs/tabs.js +0 -1621
- data/node_modules/govuk-frontend/govuk/components/tag/_index.scss +0 -81
- data/node_modules/govuk-frontend/govuk/components/textarea/_textarea.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/warning-text/_warning-text.scss +0 -2
- data/node_modules/govuk-frontend/govuk/core/_govuk-frontend-version.scss +0 -5
- data/node_modules/govuk-frontend/govuk/helpers/_colour.scss +0 -98
- data/node_modules/govuk-frontend/govuk/helpers/_font-faces.scss +0 -41
- data/node_modules/govuk-frontend/govuk/helpers/_typography.scss +0 -214
- data/node_modules/govuk-frontend/govuk/i18n.js +0 -397
- data/node_modules/govuk-frontend/govuk/overrides/_typography.scss +0 -21
- data/node_modules/govuk-frontend/govuk/settings/_colours-organisations.scss +0 -146
- data/node_modules/govuk-frontend/govuk/settings/_colours-palette.scss +0 -120
- data/node_modules/govuk-frontend/govuk/settings/_compatibility.scss +0 -100
- data/node_modules/govuk-frontend/govuk/settings/_ie8.scss +0 -34
- data/node_modules/govuk-frontend/govuk/settings/_typography-font-families.scss +0 -32
- data/node_modules/govuk-frontend/govuk/settings/_typography-font.scss +0 -112
- data/node_modules/govuk-frontend/govuk/settings/_typography-responsive.scss +0 -195
- data/node_modules/govuk-frontend/govuk/tools/_compatibility.scss +0 -50
- data/node_modules/govuk-frontend/govuk/tools/_ie8.scss +0 -87
- data/node_modules/govuk-frontend/govuk/vendor/polyfills/DOMTokenList.js +0 -274
- data/node_modules/govuk-frontend/govuk/vendor/polyfills/Date/now.js +0 -23
- data/node_modules/govuk-frontend/govuk/vendor/polyfills/Document.js +0 -36
- data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/classList.js +0 -597
- data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/closest.js +0 -58
- data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/dataset.js +0 -307
- data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/matches.js +0 -33
- data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/nextElementSibling.js +0 -261
- data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/previousElementSibling.js +0 -261
- data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element.js +0 -151
- data/node_modules/govuk-frontend/govuk/vendor/polyfills/Event.js +0 -512
- data/node_modules/govuk-frontend/govuk/vendor/polyfills/Function/prototype/bind.js +0 -256
- data/node_modules/govuk-frontend/govuk/vendor/polyfills/Object/defineProperty.js +0 -96
- data/node_modules/govuk-frontend/govuk/vendor/polyfills/String/prototype/trim.js +0 -23
- data/node_modules/govuk-frontend/govuk/vendor/polyfills/Window.js +0 -30
- data/node_modules/govuk-frontend/govuk-prototype-kit/init.js +0 -8
- /data/node_modules/govuk-frontend/{govuk → dist/govuk}/assets/fonts/bold-affa96571d-v2.woff +0 -0
- /data/node_modules/govuk-frontend/{govuk → dist/govuk}/assets/fonts/bold-b542beb274-v2.woff2 +0 -0
- /data/node_modules/govuk-frontend/{govuk → dist/govuk}/assets/fonts/light-94a07e06a1-v2.woff2 +0 -0
- /data/node_modules/govuk-frontend/{govuk → dist/govuk}/assets/fonts/light-f591b13f7d-v2.woff +0 -0
- /data/{lib/source → node_modules/govuk-frontend/dist/govuk/assets/images}/favicon.ico +0 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
@include govuk-exports("govuk/component/service-navigation") {
|
|
2
|
+
$govuk-service-navigation-active-link-border-width: govuk-spacing(1);
|
|
3
|
+
$govuk-service-navigation-background: $govuk-canvas-background-colour;
|
|
4
|
+
$govuk-service-navigation-border-colour: $govuk-border-colour;
|
|
5
|
+
|
|
6
|
+
// We make the link colour a little darker than normal here so that it has
|
|
7
|
+
// better perceptual contrast with the navigation background.
|
|
8
|
+
$govuk-service-navigation-link-colour: govuk-shade($govuk-link-colour, 10%);
|
|
9
|
+
|
|
10
|
+
.govuk-service-navigation {
|
|
11
|
+
border-bottom: 1px solid $govuk-service-navigation-border-colour;
|
|
12
|
+
background-color: $govuk-service-navigation-background;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.govuk-service-navigation__container {
|
|
16
|
+
display: flex;
|
|
17
|
+
flex-direction: column;
|
|
18
|
+
align-items: start;
|
|
19
|
+
|
|
20
|
+
@include govuk-media-query($from: tablet) {
|
|
21
|
+
flex-direction: row;
|
|
22
|
+
flex-wrap: wrap;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// These styles are shared between nav items and the service name, they
|
|
27
|
+
// ensure that both of them remain vertically aligned with one another
|
|
28
|
+
.govuk-service-navigation__item,
|
|
29
|
+
.govuk-service-navigation__service-name {
|
|
30
|
+
position: relative;
|
|
31
|
+
margin: govuk-spacing(2) 0;
|
|
32
|
+
border: 0 solid $govuk-service-navigation-link-colour;
|
|
33
|
+
|
|
34
|
+
@include govuk-media-query($from: tablet) {
|
|
35
|
+
margin-top: 0;
|
|
36
|
+
margin-bottom: 0;
|
|
37
|
+
padding: govuk-spacing(4) 0;
|
|
38
|
+
|
|
39
|
+
&:not(:last-child) {
|
|
40
|
+
@include govuk-responsive-margin(6, $direction: right);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.govuk-service-navigation__item--active {
|
|
46
|
+
@include govuk-media-query($until: tablet) {
|
|
47
|
+
// Negative offset the left margin so we can place a current page indicator
|
|
48
|
+
// to the left without misaligning the list item text.
|
|
49
|
+
margin-left: ((govuk-spacing(2) + $govuk-service-navigation-active-link-border-width) * -1);
|
|
50
|
+
padding-left: govuk-spacing(2);
|
|
51
|
+
border-left-width: $govuk-service-navigation-active-link-border-width;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@include govuk-media-query($from: tablet) {
|
|
55
|
+
padding-bottom: govuk-spacing(4) - $govuk-service-navigation-active-link-border-width;
|
|
56
|
+
border-bottom-width: $govuk-service-navigation-active-link-border-width;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.govuk-service-navigation__link {
|
|
61
|
+
@include govuk-link-common;
|
|
62
|
+
@include govuk-link-style-no-underline;
|
|
63
|
+
@include govuk-link-style-no-visited-state;
|
|
64
|
+
|
|
65
|
+
&:not(:hover):not(:focus) {
|
|
66
|
+
// We set the colour here as we don't want to override the hover or
|
|
67
|
+
// focus colours
|
|
68
|
+
color: $govuk-service-navigation-link-colour;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
//
|
|
73
|
+
// Service name specific code
|
|
74
|
+
//
|
|
75
|
+
|
|
76
|
+
.govuk-service-navigation__service-name {
|
|
77
|
+
@include govuk-font($size: 19, $weight: bold);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Annoyingly this requires a compound selector in order to overcome the
|
|
81
|
+
// specificity of the other link colour override we're doing
|
|
82
|
+
.govuk-service-navigation__service-name .govuk-service-navigation__link {
|
|
83
|
+
@include govuk-link-style-text;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
//
|
|
87
|
+
// Navigation list specific code
|
|
88
|
+
//
|
|
89
|
+
|
|
90
|
+
.govuk-service-navigation__toggle {
|
|
91
|
+
@include govuk-font($size: 19, $weight: bold);
|
|
92
|
+
display: inline-flex;
|
|
93
|
+
margin: govuk-spacing(2) 0;
|
|
94
|
+
padding: 0;
|
|
95
|
+
border: 0;
|
|
96
|
+
color: $govuk-service-navigation-link-colour;
|
|
97
|
+
background: none;
|
|
98
|
+
word-break: break-all;
|
|
99
|
+
cursor: pointer;
|
|
100
|
+
align-items: center;
|
|
101
|
+
|
|
102
|
+
&:focus {
|
|
103
|
+
@include govuk-focused-text;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
&::after {
|
|
107
|
+
@include govuk-shape-arrow($direction: down, $base: 10px, $display: inline-block);
|
|
108
|
+
content: "";
|
|
109
|
+
margin-left: govuk-spacing(1);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
&[aria-expanded="true"]::after {
|
|
113
|
+
@include govuk-shape-arrow($direction: up, $base: 10px, $display: inline-block);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Ensure the button stays hidden if the hidden attribute is present
|
|
117
|
+
&[hidden] {
|
|
118
|
+
display: none;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// If we have both a service name and navigation toggle, remove the
|
|
122
|
+
// margin-top so that there isn't a bunch of space between them
|
|
123
|
+
.govuk-service-navigation__service-name + .govuk-service-navigation__wrapper & {
|
|
124
|
+
margin-top: 0;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.govuk-service-navigation__list {
|
|
129
|
+
@include govuk-font($size: 19);
|
|
130
|
+
margin: 0;
|
|
131
|
+
margin-bottom: govuk-spacing(3);
|
|
132
|
+
padding: 0;
|
|
133
|
+
list-style: none;
|
|
134
|
+
|
|
135
|
+
// Make the navigation list a flexbox. Doing so resolves a couple of
|
|
136
|
+
// accessibility problems caused by the list items being inline-blocks:
|
|
137
|
+
// - Removes the extra whitespace from between each list item that screen
|
|
138
|
+
// readers would pointlessly announce.
|
|
139
|
+
// - Fixes an NVDA issue in Firefox and Chrome <= 124 where it would read
|
|
140
|
+
// all of the links as a run-on sentence.
|
|
141
|
+
@include govuk-media-query($from: tablet) {
|
|
142
|
+
display: flex;
|
|
143
|
+
flex-wrap: wrap;
|
|
144
|
+
margin-bottom: 0;
|
|
145
|
+
|
|
146
|
+
// However... IE11 totally trips over flexbox and doesn't wrap anything,
|
|
147
|
+
// making all of the items into a single, horizontally scrolling row,
|
|
148
|
+
// which is no good. This CSS hack removes the flexbox definition for
|
|
149
|
+
// IE 10 & 11, reverting it to the flawed, but OK, non-flexbox version.
|
|
150
|
+
//
|
|
151
|
+
// CSS hack taken from https://stackoverflow.com/questions/11173106/apply-style-only-on-ie#answer-36448860
|
|
152
|
+
// which also includes an explanation of why this works
|
|
153
|
+
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
|
|
154
|
+
display: block;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// This is a <strong> element that is used as a fallback mechanism for
|
|
160
|
+
// visually indicating the current page in scenarios where CSS isn't
|
|
161
|
+
// available. We don't actually want it to be bold normally, so set it to
|
|
162
|
+
// inherit the parent font-weight.
|
|
163
|
+
.govuk-service-navigation__active-fallback {
|
|
164
|
+
font-weight: inherit;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/*# sourceMappingURL=_index.scss.map */
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
(function (global, factory) {
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.GOVUKFrontend = {}));
|
|
5
|
+
})(this, (function (exports) { 'use strict';
|
|
6
|
+
|
|
7
|
+
function getBreakpoint(name) {
|
|
8
|
+
const property = `--govuk-frontend-breakpoint-${name}`;
|
|
9
|
+
const value = window.getComputedStyle(document.documentElement).getPropertyValue(property);
|
|
10
|
+
return {
|
|
11
|
+
property,
|
|
12
|
+
value: value || undefined
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function isInitialised($root, moduleName) {
|
|
16
|
+
return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Checks if GOV.UK Frontend is supported on this page
|
|
21
|
+
*
|
|
22
|
+
* Some browsers will load and run our JavaScript but GOV.UK Frontend
|
|
23
|
+
* won't be supported.
|
|
24
|
+
*
|
|
25
|
+
* @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support
|
|
26
|
+
* @returns {boolean} Whether GOV.UK Frontend is supported on this page
|
|
27
|
+
*/
|
|
28
|
+
function isSupported($scope = document.body) {
|
|
29
|
+
if (!$scope) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
return $scope.classList.contains('govuk-frontend-supported');
|
|
33
|
+
}
|
|
34
|
+
function formatErrorMessage(Component, message) {
|
|
35
|
+
return `${Component.moduleName}: ${message}`;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Schema for component config
|
|
40
|
+
*
|
|
41
|
+
* @typedef {object} Schema
|
|
42
|
+
* @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties
|
|
43
|
+
* @property {SchemaCondition[]} [anyOf] - List of schema conditions
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Schema property for component config
|
|
48
|
+
*
|
|
49
|
+
* @typedef {object} SchemaProperty
|
|
50
|
+
* @property {'string' | 'boolean' | 'number' | 'object'} type - Property type
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Schema condition for component config
|
|
55
|
+
*
|
|
56
|
+
* @typedef {object} SchemaCondition
|
|
57
|
+
* @property {string[]} required - List of required config fields
|
|
58
|
+
* @property {string} errorMessage - Error message when required config fields not provided
|
|
59
|
+
*/
|
|
60
|
+
/**
|
|
61
|
+
* @typedef ComponentWithModuleName
|
|
62
|
+
* @property {string} moduleName - Name of the component
|
|
63
|
+
*/
|
|
64
|
+
|
|
65
|
+
class GOVUKFrontendError extends Error {
|
|
66
|
+
constructor(...args) {
|
|
67
|
+
super(...args);
|
|
68
|
+
this.name = 'GOVUKFrontendError';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
class SupportError extends GOVUKFrontendError {
|
|
72
|
+
/**
|
|
73
|
+
* Checks if GOV.UK Frontend is supported on this page
|
|
74
|
+
*
|
|
75
|
+
* @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support
|
|
76
|
+
*/
|
|
77
|
+
constructor($scope = document.body) {
|
|
78
|
+
const supportMessage = 'noModule' in HTMLScriptElement.prototype ? 'GOV.UK Frontend initialised without `<body class="govuk-frontend-supported">` from template `<script>` snippet' : 'GOV.UK Frontend is not supported in this browser';
|
|
79
|
+
super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type="module">`');
|
|
80
|
+
this.name = 'SupportError';
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
class ElementError extends GOVUKFrontendError {
|
|
84
|
+
constructor(messageOrOptions) {
|
|
85
|
+
let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';
|
|
86
|
+
if (typeof messageOrOptions === 'object') {
|
|
87
|
+
const {
|
|
88
|
+
component,
|
|
89
|
+
identifier,
|
|
90
|
+
element,
|
|
91
|
+
expectedType
|
|
92
|
+
} = messageOrOptions;
|
|
93
|
+
message = identifier;
|
|
94
|
+
message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';
|
|
95
|
+
message = formatErrorMessage(component, message);
|
|
96
|
+
}
|
|
97
|
+
super(message);
|
|
98
|
+
this.name = 'ElementError';
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
class InitError extends GOVUKFrontendError {
|
|
102
|
+
constructor(componentOrMessage) {
|
|
103
|
+
const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\`$root\`) already initialised`);
|
|
104
|
+
super(message);
|
|
105
|
+
this.name = 'InitError';
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* @typedef {import('../common/index.mjs').ComponentWithModuleName} ComponentWithModuleName
|
|
110
|
+
*/
|
|
111
|
+
|
|
112
|
+
class GOVUKFrontendComponent {
|
|
113
|
+
/**
|
|
114
|
+
* Returns the root element of the component
|
|
115
|
+
*
|
|
116
|
+
* @protected
|
|
117
|
+
* @returns {RootElementType} - the root element of component
|
|
118
|
+
*/
|
|
119
|
+
get $root() {
|
|
120
|
+
return this._$root;
|
|
121
|
+
}
|
|
122
|
+
constructor($root) {
|
|
123
|
+
this._$root = void 0;
|
|
124
|
+
const childConstructor = this.constructor;
|
|
125
|
+
if (typeof childConstructor.moduleName !== 'string') {
|
|
126
|
+
throw new InitError(`\`moduleName\` not defined in component`);
|
|
127
|
+
}
|
|
128
|
+
if (!($root instanceof childConstructor.elementType)) {
|
|
129
|
+
throw new ElementError({
|
|
130
|
+
element: $root,
|
|
131
|
+
component: childConstructor,
|
|
132
|
+
identifier: 'Root element (`$root`)',
|
|
133
|
+
expectedType: childConstructor.elementType.name
|
|
134
|
+
});
|
|
135
|
+
} else {
|
|
136
|
+
this._$root = $root;
|
|
137
|
+
}
|
|
138
|
+
childConstructor.checkSupport();
|
|
139
|
+
this.checkInitialised();
|
|
140
|
+
const moduleName = childConstructor.moduleName;
|
|
141
|
+
this.$root.setAttribute(`data-${moduleName}-init`, '');
|
|
142
|
+
}
|
|
143
|
+
checkInitialised() {
|
|
144
|
+
const constructor = this.constructor;
|
|
145
|
+
const moduleName = constructor.moduleName;
|
|
146
|
+
if (moduleName && isInitialised(this.$root, moduleName)) {
|
|
147
|
+
throw new InitError(constructor);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
static checkSupport() {
|
|
151
|
+
if (!isSupported()) {
|
|
152
|
+
throw new SupportError();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* @typedef ChildClass
|
|
159
|
+
* @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component
|
|
160
|
+
*/
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* @typedef {typeof GOVUKFrontendComponent & ChildClass} ChildClassConstructor
|
|
164
|
+
*/
|
|
165
|
+
GOVUKFrontendComponent.elementType = HTMLElement;
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Service Navigation component
|
|
169
|
+
*
|
|
170
|
+
* @preserve
|
|
171
|
+
*/
|
|
172
|
+
class ServiceNavigation extends GOVUKFrontendComponent {
|
|
173
|
+
/**
|
|
174
|
+
* @param {Element | null} $root - HTML element to use for header
|
|
175
|
+
*/
|
|
176
|
+
constructor($root) {
|
|
177
|
+
super($root);
|
|
178
|
+
this.$menuButton = void 0;
|
|
179
|
+
this.$menu = void 0;
|
|
180
|
+
this.menuIsOpen = false;
|
|
181
|
+
this.mql = null;
|
|
182
|
+
const $menuButton = this.$root.querySelector('.govuk-js-service-navigation-toggle');
|
|
183
|
+
if (!$menuButton) {
|
|
184
|
+
return this;
|
|
185
|
+
}
|
|
186
|
+
const menuId = $menuButton.getAttribute('aria-controls');
|
|
187
|
+
if (!menuId) {
|
|
188
|
+
throw new ElementError({
|
|
189
|
+
component: ServiceNavigation,
|
|
190
|
+
identifier: 'Navigation button (`<button class="govuk-js-service-navigation-toggle">`) attribute (`aria-controls`)'
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
const $menu = document.getElementById(menuId);
|
|
194
|
+
if (!$menu) {
|
|
195
|
+
throw new ElementError({
|
|
196
|
+
component: ServiceNavigation,
|
|
197
|
+
element: $menu,
|
|
198
|
+
identifier: `Navigation (\`<ul id="${menuId}">\`)`
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
this.$menu = $menu;
|
|
202
|
+
this.$menuButton = $menuButton;
|
|
203
|
+
this.setupResponsiveChecks();
|
|
204
|
+
this.$menuButton.addEventListener('click', () => this.handleMenuButtonClick());
|
|
205
|
+
}
|
|
206
|
+
setupResponsiveChecks() {
|
|
207
|
+
const breakpoint = getBreakpoint('tablet');
|
|
208
|
+
if (!breakpoint.value) {
|
|
209
|
+
throw new ElementError({
|
|
210
|
+
component: ServiceNavigation,
|
|
211
|
+
identifier: `CSS custom property (\`${breakpoint.property}\`) on pseudo-class \`:root\``
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
this.mql = window.matchMedia(`(min-width: ${breakpoint.value})`);
|
|
215
|
+
if ('addEventListener' in this.mql) {
|
|
216
|
+
this.mql.addEventListener('change', () => this.checkMode());
|
|
217
|
+
} else {
|
|
218
|
+
this.mql.addListener(() => this.checkMode());
|
|
219
|
+
}
|
|
220
|
+
this.checkMode();
|
|
221
|
+
}
|
|
222
|
+
checkMode() {
|
|
223
|
+
if (!this.mql || !this.$menu || !this.$menuButton) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
if (this.mql.matches) {
|
|
227
|
+
this.$menu.removeAttribute('hidden');
|
|
228
|
+
this.$menuButton.setAttribute('hidden', '');
|
|
229
|
+
} else {
|
|
230
|
+
this.$menuButton.removeAttribute('hidden');
|
|
231
|
+
this.$menuButton.setAttribute('aria-expanded', this.menuIsOpen.toString());
|
|
232
|
+
if (this.menuIsOpen) {
|
|
233
|
+
this.$menu.removeAttribute('hidden');
|
|
234
|
+
} else {
|
|
235
|
+
this.$menu.setAttribute('hidden', '');
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
handleMenuButtonClick() {
|
|
240
|
+
this.menuIsOpen = !this.menuIsOpen;
|
|
241
|
+
this.checkMode();
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
ServiceNavigation.moduleName = 'govuk-service-navigation';
|
|
245
|
+
|
|
246
|
+
exports.ServiceNavigation = ServiceNavigation;
|
|
247
|
+
|
|
248
|
+
}));
|
|
249
|
+
//# sourceMappingURL=service-navigation.bundle.js.map
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
function getBreakpoint(name) {
|
|
2
|
+
const property = `--govuk-frontend-breakpoint-${name}`;
|
|
3
|
+
const value = window.getComputedStyle(document.documentElement).getPropertyValue(property);
|
|
4
|
+
return {
|
|
5
|
+
property,
|
|
6
|
+
value: value || undefined
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
function isInitialised($root, moduleName) {
|
|
10
|
+
return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Checks if GOV.UK Frontend is supported on this page
|
|
15
|
+
*
|
|
16
|
+
* Some browsers will load and run our JavaScript but GOV.UK Frontend
|
|
17
|
+
* won't be supported.
|
|
18
|
+
*
|
|
19
|
+
* @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support
|
|
20
|
+
* @returns {boolean} Whether GOV.UK Frontend is supported on this page
|
|
21
|
+
*/
|
|
22
|
+
function isSupported($scope = document.body) {
|
|
23
|
+
if (!$scope) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
return $scope.classList.contains('govuk-frontend-supported');
|
|
27
|
+
}
|
|
28
|
+
function formatErrorMessage(Component, message) {
|
|
29
|
+
return `${Component.moduleName}: ${message}`;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Schema for component config
|
|
34
|
+
*
|
|
35
|
+
* @typedef {object} Schema
|
|
36
|
+
* @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties
|
|
37
|
+
* @property {SchemaCondition[]} [anyOf] - List of schema conditions
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Schema property for component config
|
|
42
|
+
*
|
|
43
|
+
* @typedef {object} SchemaProperty
|
|
44
|
+
* @property {'string' | 'boolean' | 'number' | 'object'} type - Property type
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Schema condition for component config
|
|
49
|
+
*
|
|
50
|
+
* @typedef {object} SchemaCondition
|
|
51
|
+
* @property {string[]} required - List of required config fields
|
|
52
|
+
* @property {string} errorMessage - Error message when required config fields not provided
|
|
53
|
+
*/
|
|
54
|
+
/**
|
|
55
|
+
* @typedef ComponentWithModuleName
|
|
56
|
+
* @property {string} moduleName - Name of the component
|
|
57
|
+
*/
|
|
58
|
+
|
|
59
|
+
class GOVUKFrontendError extends Error {
|
|
60
|
+
constructor(...args) {
|
|
61
|
+
super(...args);
|
|
62
|
+
this.name = 'GOVUKFrontendError';
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
class SupportError extends GOVUKFrontendError {
|
|
66
|
+
/**
|
|
67
|
+
* Checks if GOV.UK Frontend is supported on this page
|
|
68
|
+
*
|
|
69
|
+
* @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support
|
|
70
|
+
*/
|
|
71
|
+
constructor($scope = document.body) {
|
|
72
|
+
const supportMessage = 'noModule' in HTMLScriptElement.prototype ? 'GOV.UK Frontend initialised without `<body class="govuk-frontend-supported">` from template `<script>` snippet' : 'GOV.UK Frontend is not supported in this browser';
|
|
73
|
+
super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type="module">`');
|
|
74
|
+
this.name = 'SupportError';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
class ElementError extends GOVUKFrontendError {
|
|
78
|
+
constructor(messageOrOptions) {
|
|
79
|
+
let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';
|
|
80
|
+
if (typeof messageOrOptions === 'object') {
|
|
81
|
+
const {
|
|
82
|
+
component,
|
|
83
|
+
identifier,
|
|
84
|
+
element,
|
|
85
|
+
expectedType
|
|
86
|
+
} = messageOrOptions;
|
|
87
|
+
message = identifier;
|
|
88
|
+
message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';
|
|
89
|
+
message = formatErrorMessage(component, message);
|
|
90
|
+
}
|
|
91
|
+
super(message);
|
|
92
|
+
this.name = 'ElementError';
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
class InitError extends GOVUKFrontendError {
|
|
96
|
+
constructor(componentOrMessage) {
|
|
97
|
+
const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\`$root\`) already initialised`);
|
|
98
|
+
super(message);
|
|
99
|
+
this.name = 'InitError';
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* @typedef {import('../common/index.mjs').ComponentWithModuleName} ComponentWithModuleName
|
|
104
|
+
*/
|
|
105
|
+
|
|
106
|
+
class GOVUKFrontendComponent {
|
|
107
|
+
/**
|
|
108
|
+
* Returns the root element of the component
|
|
109
|
+
*
|
|
110
|
+
* @protected
|
|
111
|
+
* @returns {RootElementType} - the root element of component
|
|
112
|
+
*/
|
|
113
|
+
get $root() {
|
|
114
|
+
return this._$root;
|
|
115
|
+
}
|
|
116
|
+
constructor($root) {
|
|
117
|
+
this._$root = void 0;
|
|
118
|
+
const childConstructor = this.constructor;
|
|
119
|
+
if (typeof childConstructor.moduleName !== 'string') {
|
|
120
|
+
throw new InitError(`\`moduleName\` not defined in component`);
|
|
121
|
+
}
|
|
122
|
+
if (!($root instanceof childConstructor.elementType)) {
|
|
123
|
+
throw new ElementError({
|
|
124
|
+
element: $root,
|
|
125
|
+
component: childConstructor,
|
|
126
|
+
identifier: 'Root element (`$root`)',
|
|
127
|
+
expectedType: childConstructor.elementType.name
|
|
128
|
+
});
|
|
129
|
+
} else {
|
|
130
|
+
this._$root = $root;
|
|
131
|
+
}
|
|
132
|
+
childConstructor.checkSupport();
|
|
133
|
+
this.checkInitialised();
|
|
134
|
+
const moduleName = childConstructor.moduleName;
|
|
135
|
+
this.$root.setAttribute(`data-${moduleName}-init`, '');
|
|
136
|
+
}
|
|
137
|
+
checkInitialised() {
|
|
138
|
+
const constructor = this.constructor;
|
|
139
|
+
const moduleName = constructor.moduleName;
|
|
140
|
+
if (moduleName && isInitialised(this.$root, moduleName)) {
|
|
141
|
+
throw new InitError(constructor);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
static checkSupport() {
|
|
145
|
+
if (!isSupported()) {
|
|
146
|
+
throw new SupportError();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* @typedef ChildClass
|
|
153
|
+
* @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component
|
|
154
|
+
*/
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* @typedef {typeof GOVUKFrontendComponent & ChildClass} ChildClassConstructor
|
|
158
|
+
*/
|
|
159
|
+
GOVUKFrontendComponent.elementType = HTMLElement;
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Service Navigation component
|
|
163
|
+
*
|
|
164
|
+
* @preserve
|
|
165
|
+
*/
|
|
166
|
+
class ServiceNavigation extends GOVUKFrontendComponent {
|
|
167
|
+
/**
|
|
168
|
+
* @param {Element | null} $root - HTML element to use for header
|
|
169
|
+
*/
|
|
170
|
+
constructor($root) {
|
|
171
|
+
super($root);
|
|
172
|
+
this.$menuButton = void 0;
|
|
173
|
+
this.$menu = void 0;
|
|
174
|
+
this.menuIsOpen = false;
|
|
175
|
+
this.mql = null;
|
|
176
|
+
const $menuButton = this.$root.querySelector('.govuk-js-service-navigation-toggle');
|
|
177
|
+
if (!$menuButton) {
|
|
178
|
+
return this;
|
|
179
|
+
}
|
|
180
|
+
const menuId = $menuButton.getAttribute('aria-controls');
|
|
181
|
+
if (!menuId) {
|
|
182
|
+
throw new ElementError({
|
|
183
|
+
component: ServiceNavigation,
|
|
184
|
+
identifier: 'Navigation button (`<button class="govuk-js-service-navigation-toggle">`) attribute (`aria-controls`)'
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
const $menu = document.getElementById(menuId);
|
|
188
|
+
if (!$menu) {
|
|
189
|
+
throw new ElementError({
|
|
190
|
+
component: ServiceNavigation,
|
|
191
|
+
element: $menu,
|
|
192
|
+
identifier: `Navigation (\`<ul id="${menuId}">\`)`
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
this.$menu = $menu;
|
|
196
|
+
this.$menuButton = $menuButton;
|
|
197
|
+
this.setupResponsiveChecks();
|
|
198
|
+
this.$menuButton.addEventListener('click', () => this.handleMenuButtonClick());
|
|
199
|
+
}
|
|
200
|
+
setupResponsiveChecks() {
|
|
201
|
+
const breakpoint = getBreakpoint('tablet');
|
|
202
|
+
if (!breakpoint.value) {
|
|
203
|
+
throw new ElementError({
|
|
204
|
+
component: ServiceNavigation,
|
|
205
|
+
identifier: `CSS custom property (\`${breakpoint.property}\`) on pseudo-class \`:root\``
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
this.mql = window.matchMedia(`(min-width: ${breakpoint.value})`);
|
|
209
|
+
if ('addEventListener' in this.mql) {
|
|
210
|
+
this.mql.addEventListener('change', () => this.checkMode());
|
|
211
|
+
} else {
|
|
212
|
+
this.mql.addListener(() => this.checkMode());
|
|
213
|
+
}
|
|
214
|
+
this.checkMode();
|
|
215
|
+
}
|
|
216
|
+
checkMode() {
|
|
217
|
+
if (!this.mql || !this.$menu || !this.$menuButton) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
if (this.mql.matches) {
|
|
221
|
+
this.$menu.removeAttribute('hidden');
|
|
222
|
+
this.$menuButton.setAttribute('hidden', '');
|
|
223
|
+
} else {
|
|
224
|
+
this.$menuButton.removeAttribute('hidden');
|
|
225
|
+
this.$menuButton.setAttribute('aria-expanded', this.menuIsOpen.toString());
|
|
226
|
+
if (this.menuIsOpen) {
|
|
227
|
+
this.$menu.removeAttribute('hidden');
|
|
228
|
+
} else {
|
|
229
|
+
this.$menu.setAttribute('hidden', '');
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
handleMenuButtonClick() {
|
|
234
|
+
this.menuIsOpen = !this.menuIsOpen;
|
|
235
|
+
this.checkMode();
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
ServiceNavigation.moduleName = 'govuk-service-navigation';
|
|
239
|
+
|
|
240
|
+
export { ServiceNavigation };
|
|
241
|
+
//# sourceMappingURL=service-navigation.bundle.mjs.map
|