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,320 @@
|
|
|
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 normaliseString(value, property) {
|
|
8
|
+
const trimmedValue = value ? value.trim() : '';
|
|
9
|
+
let output;
|
|
10
|
+
let outputType = property == null ? void 0 : property.type;
|
|
11
|
+
if (!outputType) {
|
|
12
|
+
if (['true', 'false'].includes(trimmedValue)) {
|
|
13
|
+
outputType = 'boolean';
|
|
14
|
+
}
|
|
15
|
+
if (trimmedValue.length > 0 && isFinite(Number(trimmedValue))) {
|
|
16
|
+
outputType = 'number';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
switch (outputType) {
|
|
20
|
+
case 'boolean':
|
|
21
|
+
output = trimmedValue === 'true';
|
|
22
|
+
break;
|
|
23
|
+
case 'number':
|
|
24
|
+
output = Number(trimmedValue);
|
|
25
|
+
break;
|
|
26
|
+
default:
|
|
27
|
+
output = value;
|
|
28
|
+
}
|
|
29
|
+
return output;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @typedef {import('./index.mjs').SchemaProperty} SchemaProperty
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
function mergeConfigs(...configObjects) {
|
|
37
|
+
const formattedConfigObject = {};
|
|
38
|
+
for (const configObject of configObjects) {
|
|
39
|
+
for (const key of Object.keys(configObject)) {
|
|
40
|
+
const option = formattedConfigObject[key];
|
|
41
|
+
const override = configObject[key];
|
|
42
|
+
if (isObject(option) && isObject(override)) {
|
|
43
|
+
formattedConfigObject[key] = mergeConfigs(option, override);
|
|
44
|
+
} else {
|
|
45
|
+
formattedConfigObject[key] = override;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return formattedConfigObject;
|
|
50
|
+
}
|
|
51
|
+
function extractConfigByNamespace(Component, dataset, namespace) {
|
|
52
|
+
const property = Component.schema.properties[namespace];
|
|
53
|
+
if ((property == null ? void 0 : property.type) !== 'object') {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const newObject = {
|
|
57
|
+
[namespace]: ({})
|
|
58
|
+
};
|
|
59
|
+
for (const [key, value] of Object.entries(dataset)) {
|
|
60
|
+
let current = newObject;
|
|
61
|
+
const keyParts = key.split('.');
|
|
62
|
+
for (const [index, name] of keyParts.entries()) {
|
|
63
|
+
if (typeof current === 'object') {
|
|
64
|
+
if (index < keyParts.length - 1) {
|
|
65
|
+
if (!isObject(current[name])) {
|
|
66
|
+
current[name] = {};
|
|
67
|
+
}
|
|
68
|
+
current = current[name];
|
|
69
|
+
} else if (key !== namespace) {
|
|
70
|
+
current[name] = normaliseString(value);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return newObject[namespace];
|
|
76
|
+
}
|
|
77
|
+
function setFocus($element, options = {}) {
|
|
78
|
+
var _options$onBeforeFocu;
|
|
79
|
+
const isFocusable = $element.getAttribute('tabindex');
|
|
80
|
+
if (!isFocusable) {
|
|
81
|
+
$element.setAttribute('tabindex', '-1');
|
|
82
|
+
}
|
|
83
|
+
function onFocus() {
|
|
84
|
+
$element.addEventListener('blur', onBlur, {
|
|
85
|
+
once: true
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
function onBlur() {
|
|
89
|
+
var _options$onBlur;
|
|
90
|
+
(_options$onBlur = options.onBlur) == null || _options$onBlur.call($element);
|
|
91
|
+
if (!isFocusable) {
|
|
92
|
+
$element.removeAttribute('tabindex');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
$element.addEventListener('focus', onFocus, {
|
|
96
|
+
once: true
|
|
97
|
+
});
|
|
98
|
+
(_options$onBeforeFocu = options.onBeforeFocus) == null || _options$onBeforeFocu.call($element);
|
|
99
|
+
$element.focus();
|
|
100
|
+
}
|
|
101
|
+
function isInitialised($root, moduleName) {
|
|
102
|
+
return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Checks if GOV.UK Frontend is supported on this page
|
|
107
|
+
*
|
|
108
|
+
* Some browsers will load and run our JavaScript but GOV.UK Frontend
|
|
109
|
+
* won't be supported.
|
|
110
|
+
*
|
|
111
|
+
* @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support
|
|
112
|
+
* @returns {boolean} Whether GOV.UK Frontend is supported on this page
|
|
113
|
+
*/
|
|
114
|
+
function isSupported($scope = document.body) {
|
|
115
|
+
if (!$scope) {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
return $scope.classList.contains('govuk-frontend-supported');
|
|
119
|
+
}
|
|
120
|
+
function isArray(option) {
|
|
121
|
+
return Array.isArray(option);
|
|
122
|
+
}
|
|
123
|
+
function isObject(option) {
|
|
124
|
+
return !!option && typeof option === 'object' && !isArray(option);
|
|
125
|
+
}
|
|
126
|
+
function formatErrorMessage(Component, message) {
|
|
127
|
+
return `${Component.moduleName}: ${message}`;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Schema for component config
|
|
132
|
+
*
|
|
133
|
+
* @typedef {object} Schema
|
|
134
|
+
* @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties
|
|
135
|
+
* @property {SchemaCondition[]} [anyOf] - List of schema conditions
|
|
136
|
+
*/
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Schema property for component config
|
|
140
|
+
*
|
|
141
|
+
* @typedef {object} SchemaProperty
|
|
142
|
+
* @property {'string' | 'boolean' | 'number' | 'object'} type - Property type
|
|
143
|
+
*/
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Schema condition for component config
|
|
147
|
+
*
|
|
148
|
+
* @typedef {object} SchemaCondition
|
|
149
|
+
* @property {string[]} required - List of required config fields
|
|
150
|
+
* @property {string} errorMessage - Error message when required config fields not provided
|
|
151
|
+
*/
|
|
152
|
+
/**
|
|
153
|
+
* @typedef ComponentWithModuleName
|
|
154
|
+
* @property {string} moduleName - Name of the component
|
|
155
|
+
*/
|
|
156
|
+
|
|
157
|
+
function normaliseDataset(Component, dataset) {
|
|
158
|
+
const out = {};
|
|
159
|
+
for (const [field, property] of Object.entries(Component.schema.properties)) {
|
|
160
|
+
if (field in dataset) {
|
|
161
|
+
out[field] = normaliseString(dataset[field], property);
|
|
162
|
+
}
|
|
163
|
+
if ((property == null ? void 0 : property.type) === 'object') {
|
|
164
|
+
out[field] = extractConfigByNamespace(Component, dataset, field);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return out;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
class GOVUKFrontendError extends Error {
|
|
171
|
+
constructor(...args) {
|
|
172
|
+
super(...args);
|
|
173
|
+
this.name = 'GOVUKFrontendError';
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
class SupportError extends GOVUKFrontendError {
|
|
177
|
+
/**
|
|
178
|
+
* Checks if GOV.UK Frontend is supported on this page
|
|
179
|
+
*
|
|
180
|
+
* @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support
|
|
181
|
+
*/
|
|
182
|
+
constructor($scope = document.body) {
|
|
183
|
+
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';
|
|
184
|
+
super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type="module">`');
|
|
185
|
+
this.name = 'SupportError';
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
class ElementError extends GOVUKFrontendError {
|
|
189
|
+
constructor(messageOrOptions) {
|
|
190
|
+
let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';
|
|
191
|
+
if (typeof messageOrOptions === 'object') {
|
|
192
|
+
const {
|
|
193
|
+
component,
|
|
194
|
+
identifier,
|
|
195
|
+
element,
|
|
196
|
+
expectedType
|
|
197
|
+
} = messageOrOptions;
|
|
198
|
+
message = identifier;
|
|
199
|
+
message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';
|
|
200
|
+
message = formatErrorMessage(component, message);
|
|
201
|
+
}
|
|
202
|
+
super(message);
|
|
203
|
+
this.name = 'ElementError';
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
class InitError extends GOVUKFrontendError {
|
|
207
|
+
constructor(componentOrMessage) {
|
|
208
|
+
const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\`$root\`) already initialised`);
|
|
209
|
+
super(message);
|
|
210
|
+
this.name = 'InitError';
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* @typedef {import('../common/index.mjs').ComponentWithModuleName} ComponentWithModuleName
|
|
215
|
+
*/
|
|
216
|
+
|
|
217
|
+
class GOVUKFrontendComponent {
|
|
218
|
+
/**
|
|
219
|
+
* Returns the root element of the component
|
|
220
|
+
*
|
|
221
|
+
* @protected
|
|
222
|
+
* @returns {RootElementType} - the root element of component
|
|
223
|
+
*/
|
|
224
|
+
get $root() {
|
|
225
|
+
return this._$root;
|
|
226
|
+
}
|
|
227
|
+
constructor($root) {
|
|
228
|
+
this._$root = void 0;
|
|
229
|
+
const childConstructor = this.constructor;
|
|
230
|
+
if (typeof childConstructor.moduleName !== 'string') {
|
|
231
|
+
throw new InitError(`\`moduleName\` not defined in component`);
|
|
232
|
+
}
|
|
233
|
+
if (!($root instanceof childConstructor.elementType)) {
|
|
234
|
+
throw new ElementError({
|
|
235
|
+
element: $root,
|
|
236
|
+
component: childConstructor,
|
|
237
|
+
identifier: 'Root element (`$root`)',
|
|
238
|
+
expectedType: childConstructor.elementType.name
|
|
239
|
+
});
|
|
240
|
+
} else {
|
|
241
|
+
this._$root = $root;
|
|
242
|
+
}
|
|
243
|
+
childConstructor.checkSupport();
|
|
244
|
+
this.checkInitialised();
|
|
245
|
+
const moduleName = childConstructor.moduleName;
|
|
246
|
+
this.$root.setAttribute(`data-${moduleName}-init`, '');
|
|
247
|
+
}
|
|
248
|
+
checkInitialised() {
|
|
249
|
+
const constructor = this.constructor;
|
|
250
|
+
const moduleName = constructor.moduleName;
|
|
251
|
+
if (moduleName && isInitialised(this.$root, moduleName)) {
|
|
252
|
+
throw new InitError(constructor);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
static checkSupport() {
|
|
256
|
+
if (!isSupported()) {
|
|
257
|
+
throw new SupportError();
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* @typedef ChildClass
|
|
264
|
+
* @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component
|
|
265
|
+
*/
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* @typedef {typeof GOVUKFrontendComponent & ChildClass} ChildClassConstructor
|
|
269
|
+
*/
|
|
270
|
+
GOVUKFrontendComponent.elementType = HTMLElement;
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Notification Banner component
|
|
274
|
+
*
|
|
275
|
+
* @preserve
|
|
276
|
+
*/
|
|
277
|
+
class NotificationBanner extends GOVUKFrontendComponent {
|
|
278
|
+
/**
|
|
279
|
+
* @param {Element | null} $root - HTML element to use for notification banner
|
|
280
|
+
* @param {NotificationBannerConfig} [config] - Notification banner config
|
|
281
|
+
*/
|
|
282
|
+
constructor($root, config = {}) {
|
|
283
|
+
super($root);
|
|
284
|
+
this.config = void 0;
|
|
285
|
+
this.config = mergeConfigs(NotificationBanner.defaults, config, normaliseDataset(NotificationBanner, this.$root.dataset));
|
|
286
|
+
if (this.$root.getAttribute('role') === 'alert' && !this.config.disableAutoFocus) {
|
|
287
|
+
setFocus(this.$root);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Notification banner config
|
|
294
|
+
*
|
|
295
|
+
* @typedef {object} NotificationBannerConfig
|
|
296
|
+
* @property {boolean} [disableAutoFocus=false] - If set to `true` the
|
|
297
|
+
* notification banner will not be focussed when the page loads. This only
|
|
298
|
+
* applies if the component has a `role` of `alert` – in other cases the
|
|
299
|
+
* component will not be focused on page load, regardless of this option.
|
|
300
|
+
*/
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* @typedef {import('../../common/index.mjs').Schema} Schema
|
|
304
|
+
*/
|
|
305
|
+
NotificationBanner.moduleName = 'govuk-notification-banner';
|
|
306
|
+
NotificationBanner.defaults = Object.freeze({
|
|
307
|
+
disableAutoFocus: false
|
|
308
|
+
});
|
|
309
|
+
NotificationBanner.schema = Object.freeze({
|
|
310
|
+
properties: {
|
|
311
|
+
disableAutoFocus: {
|
|
312
|
+
type: 'boolean'
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
exports.NotificationBanner = NotificationBanner;
|
|
318
|
+
|
|
319
|
+
}));
|
|
320
|
+
//# sourceMappingURL=notification-banner.bundle.js.map
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
function normaliseString(value, property) {
|
|
2
|
+
const trimmedValue = value ? value.trim() : '';
|
|
3
|
+
let output;
|
|
4
|
+
let outputType = property == null ? void 0 : property.type;
|
|
5
|
+
if (!outputType) {
|
|
6
|
+
if (['true', 'false'].includes(trimmedValue)) {
|
|
7
|
+
outputType = 'boolean';
|
|
8
|
+
}
|
|
9
|
+
if (trimmedValue.length > 0 && isFinite(Number(trimmedValue))) {
|
|
10
|
+
outputType = 'number';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
switch (outputType) {
|
|
14
|
+
case 'boolean':
|
|
15
|
+
output = trimmedValue === 'true';
|
|
16
|
+
break;
|
|
17
|
+
case 'number':
|
|
18
|
+
output = Number(trimmedValue);
|
|
19
|
+
break;
|
|
20
|
+
default:
|
|
21
|
+
output = value;
|
|
22
|
+
}
|
|
23
|
+
return output;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @typedef {import('./index.mjs').SchemaProperty} SchemaProperty
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
function mergeConfigs(...configObjects) {
|
|
31
|
+
const formattedConfigObject = {};
|
|
32
|
+
for (const configObject of configObjects) {
|
|
33
|
+
for (const key of Object.keys(configObject)) {
|
|
34
|
+
const option = formattedConfigObject[key];
|
|
35
|
+
const override = configObject[key];
|
|
36
|
+
if (isObject(option) && isObject(override)) {
|
|
37
|
+
formattedConfigObject[key] = mergeConfigs(option, override);
|
|
38
|
+
} else {
|
|
39
|
+
formattedConfigObject[key] = override;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return formattedConfigObject;
|
|
44
|
+
}
|
|
45
|
+
function extractConfigByNamespace(Component, dataset, namespace) {
|
|
46
|
+
const property = Component.schema.properties[namespace];
|
|
47
|
+
if ((property == null ? void 0 : property.type) !== 'object') {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const newObject = {
|
|
51
|
+
[namespace]: ({})
|
|
52
|
+
};
|
|
53
|
+
for (const [key, value] of Object.entries(dataset)) {
|
|
54
|
+
let current = newObject;
|
|
55
|
+
const keyParts = key.split('.');
|
|
56
|
+
for (const [index, name] of keyParts.entries()) {
|
|
57
|
+
if (typeof current === 'object') {
|
|
58
|
+
if (index < keyParts.length - 1) {
|
|
59
|
+
if (!isObject(current[name])) {
|
|
60
|
+
current[name] = {};
|
|
61
|
+
}
|
|
62
|
+
current = current[name];
|
|
63
|
+
} else if (key !== namespace) {
|
|
64
|
+
current[name] = normaliseString(value);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return newObject[namespace];
|
|
70
|
+
}
|
|
71
|
+
function setFocus($element, options = {}) {
|
|
72
|
+
var _options$onBeforeFocu;
|
|
73
|
+
const isFocusable = $element.getAttribute('tabindex');
|
|
74
|
+
if (!isFocusable) {
|
|
75
|
+
$element.setAttribute('tabindex', '-1');
|
|
76
|
+
}
|
|
77
|
+
function onFocus() {
|
|
78
|
+
$element.addEventListener('blur', onBlur, {
|
|
79
|
+
once: true
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
function onBlur() {
|
|
83
|
+
var _options$onBlur;
|
|
84
|
+
(_options$onBlur = options.onBlur) == null || _options$onBlur.call($element);
|
|
85
|
+
if (!isFocusable) {
|
|
86
|
+
$element.removeAttribute('tabindex');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
$element.addEventListener('focus', onFocus, {
|
|
90
|
+
once: true
|
|
91
|
+
});
|
|
92
|
+
(_options$onBeforeFocu = options.onBeforeFocus) == null || _options$onBeforeFocu.call($element);
|
|
93
|
+
$element.focus();
|
|
94
|
+
}
|
|
95
|
+
function isInitialised($root, moduleName) {
|
|
96
|
+
return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Checks if GOV.UK Frontend is supported on this page
|
|
101
|
+
*
|
|
102
|
+
* Some browsers will load and run our JavaScript but GOV.UK Frontend
|
|
103
|
+
* won't be supported.
|
|
104
|
+
*
|
|
105
|
+
* @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support
|
|
106
|
+
* @returns {boolean} Whether GOV.UK Frontend is supported on this page
|
|
107
|
+
*/
|
|
108
|
+
function isSupported($scope = document.body) {
|
|
109
|
+
if (!$scope) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
return $scope.classList.contains('govuk-frontend-supported');
|
|
113
|
+
}
|
|
114
|
+
function isArray(option) {
|
|
115
|
+
return Array.isArray(option);
|
|
116
|
+
}
|
|
117
|
+
function isObject(option) {
|
|
118
|
+
return !!option && typeof option === 'object' && !isArray(option);
|
|
119
|
+
}
|
|
120
|
+
function formatErrorMessage(Component, message) {
|
|
121
|
+
return `${Component.moduleName}: ${message}`;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Schema for component config
|
|
126
|
+
*
|
|
127
|
+
* @typedef {object} Schema
|
|
128
|
+
* @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties
|
|
129
|
+
* @property {SchemaCondition[]} [anyOf] - List of schema conditions
|
|
130
|
+
*/
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Schema property for component config
|
|
134
|
+
*
|
|
135
|
+
* @typedef {object} SchemaProperty
|
|
136
|
+
* @property {'string' | 'boolean' | 'number' | 'object'} type - Property type
|
|
137
|
+
*/
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Schema condition for component config
|
|
141
|
+
*
|
|
142
|
+
* @typedef {object} SchemaCondition
|
|
143
|
+
* @property {string[]} required - List of required config fields
|
|
144
|
+
* @property {string} errorMessage - Error message when required config fields not provided
|
|
145
|
+
*/
|
|
146
|
+
/**
|
|
147
|
+
* @typedef ComponentWithModuleName
|
|
148
|
+
* @property {string} moduleName - Name of the component
|
|
149
|
+
*/
|
|
150
|
+
|
|
151
|
+
function normaliseDataset(Component, dataset) {
|
|
152
|
+
const out = {};
|
|
153
|
+
for (const [field, property] of Object.entries(Component.schema.properties)) {
|
|
154
|
+
if (field in dataset) {
|
|
155
|
+
out[field] = normaliseString(dataset[field], property);
|
|
156
|
+
}
|
|
157
|
+
if ((property == null ? void 0 : property.type) === 'object') {
|
|
158
|
+
out[field] = extractConfigByNamespace(Component, dataset, field);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return out;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
class GOVUKFrontendError extends Error {
|
|
165
|
+
constructor(...args) {
|
|
166
|
+
super(...args);
|
|
167
|
+
this.name = 'GOVUKFrontendError';
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
class SupportError extends GOVUKFrontendError {
|
|
171
|
+
/**
|
|
172
|
+
* Checks if GOV.UK Frontend is supported on this page
|
|
173
|
+
*
|
|
174
|
+
* @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support
|
|
175
|
+
*/
|
|
176
|
+
constructor($scope = document.body) {
|
|
177
|
+
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';
|
|
178
|
+
super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type="module">`');
|
|
179
|
+
this.name = 'SupportError';
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
class ElementError extends GOVUKFrontendError {
|
|
183
|
+
constructor(messageOrOptions) {
|
|
184
|
+
let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';
|
|
185
|
+
if (typeof messageOrOptions === 'object') {
|
|
186
|
+
const {
|
|
187
|
+
component,
|
|
188
|
+
identifier,
|
|
189
|
+
element,
|
|
190
|
+
expectedType
|
|
191
|
+
} = messageOrOptions;
|
|
192
|
+
message = identifier;
|
|
193
|
+
message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';
|
|
194
|
+
message = formatErrorMessage(component, message);
|
|
195
|
+
}
|
|
196
|
+
super(message);
|
|
197
|
+
this.name = 'ElementError';
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
class InitError extends GOVUKFrontendError {
|
|
201
|
+
constructor(componentOrMessage) {
|
|
202
|
+
const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\`$root\`) already initialised`);
|
|
203
|
+
super(message);
|
|
204
|
+
this.name = 'InitError';
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* @typedef {import('../common/index.mjs').ComponentWithModuleName} ComponentWithModuleName
|
|
209
|
+
*/
|
|
210
|
+
|
|
211
|
+
class GOVUKFrontendComponent {
|
|
212
|
+
/**
|
|
213
|
+
* Returns the root element of the component
|
|
214
|
+
*
|
|
215
|
+
* @protected
|
|
216
|
+
* @returns {RootElementType} - the root element of component
|
|
217
|
+
*/
|
|
218
|
+
get $root() {
|
|
219
|
+
return this._$root;
|
|
220
|
+
}
|
|
221
|
+
constructor($root) {
|
|
222
|
+
this._$root = void 0;
|
|
223
|
+
const childConstructor = this.constructor;
|
|
224
|
+
if (typeof childConstructor.moduleName !== 'string') {
|
|
225
|
+
throw new InitError(`\`moduleName\` not defined in component`);
|
|
226
|
+
}
|
|
227
|
+
if (!($root instanceof childConstructor.elementType)) {
|
|
228
|
+
throw new ElementError({
|
|
229
|
+
element: $root,
|
|
230
|
+
component: childConstructor,
|
|
231
|
+
identifier: 'Root element (`$root`)',
|
|
232
|
+
expectedType: childConstructor.elementType.name
|
|
233
|
+
});
|
|
234
|
+
} else {
|
|
235
|
+
this._$root = $root;
|
|
236
|
+
}
|
|
237
|
+
childConstructor.checkSupport();
|
|
238
|
+
this.checkInitialised();
|
|
239
|
+
const moduleName = childConstructor.moduleName;
|
|
240
|
+
this.$root.setAttribute(`data-${moduleName}-init`, '');
|
|
241
|
+
}
|
|
242
|
+
checkInitialised() {
|
|
243
|
+
const constructor = this.constructor;
|
|
244
|
+
const moduleName = constructor.moduleName;
|
|
245
|
+
if (moduleName && isInitialised(this.$root, moduleName)) {
|
|
246
|
+
throw new InitError(constructor);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
static checkSupport() {
|
|
250
|
+
if (!isSupported()) {
|
|
251
|
+
throw new SupportError();
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* @typedef ChildClass
|
|
258
|
+
* @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component
|
|
259
|
+
*/
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* @typedef {typeof GOVUKFrontendComponent & ChildClass} ChildClassConstructor
|
|
263
|
+
*/
|
|
264
|
+
GOVUKFrontendComponent.elementType = HTMLElement;
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Notification Banner component
|
|
268
|
+
*
|
|
269
|
+
* @preserve
|
|
270
|
+
*/
|
|
271
|
+
class NotificationBanner extends GOVUKFrontendComponent {
|
|
272
|
+
/**
|
|
273
|
+
* @param {Element | null} $root - HTML element to use for notification banner
|
|
274
|
+
* @param {NotificationBannerConfig} [config] - Notification banner config
|
|
275
|
+
*/
|
|
276
|
+
constructor($root, config = {}) {
|
|
277
|
+
super($root);
|
|
278
|
+
this.config = void 0;
|
|
279
|
+
this.config = mergeConfigs(NotificationBanner.defaults, config, normaliseDataset(NotificationBanner, this.$root.dataset));
|
|
280
|
+
if (this.$root.getAttribute('role') === 'alert' && !this.config.disableAutoFocus) {
|
|
281
|
+
setFocus(this.$root);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Notification banner config
|
|
288
|
+
*
|
|
289
|
+
* @typedef {object} NotificationBannerConfig
|
|
290
|
+
* @property {boolean} [disableAutoFocus=false] - If set to `true` the
|
|
291
|
+
* notification banner will not be focussed when the page loads. This only
|
|
292
|
+
* applies if the component has a `role` of `alert` – in other cases the
|
|
293
|
+
* component will not be focused on page load, regardless of this option.
|
|
294
|
+
*/
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* @typedef {import('../../common/index.mjs').Schema} Schema
|
|
298
|
+
*/
|
|
299
|
+
NotificationBanner.moduleName = 'govuk-notification-banner';
|
|
300
|
+
NotificationBanner.defaults = Object.freeze({
|
|
301
|
+
disableAutoFocus: false
|
|
302
|
+
});
|
|
303
|
+
NotificationBanner.schema = Object.freeze({
|
|
304
|
+
properties: {
|
|
305
|
+
disableAutoFocus: {
|
|
306
|
+
type: 'boolean'
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
export { NotificationBanner };
|
|
312
|
+
//# sourceMappingURL=notification-banner.bundle.mjs.map
|
data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.mjs
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { mergeConfigs, setFocus } from '../../common/index.mjs';
|
|
2
|
+
import { normaliseDataset } from '../../common/normalise-dataset.mjs';
|
|
3
|
+
import { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Notification Banner component
|
|
7
|
+
*
|
|
8
|
+
* @preserve
|
|
9
|
+
*/
|
|
10
|
+
class NotificationBanner extends GOVUKFrontendComponent {
|
|
11
|
+
/**
|
|
12
|
+
* @param {Element | null} $root - HTML element to use for notification banner
|
|
13
|
+
* @param {NotificationBannerConfig} [config] - Notification banner config
|
|
14
|
+
*/
|
|
15
|
+
constructor($root, config = {}) {
|
|
16
|
+
super($root);
|
|
17
|
+
this.config = void 0;
|
|
18
|
+
this.config = mergeConfigs(NotificationBanner.defaults, config, normaliseDataset(NotificationBanner, this.$root.dataset));
|
|
19
|
+
if (this.$root.getAttribute('role') === 'alert' && !this.config.disableAutoFocus) {
|
|
20
|
+
setFocus(this.$root);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Notification banner config
|
|
27
|
+
*
|
|
28
|
+
* @typedef {object} NotificationBannerConfig
|
|
29
|
+
* @property {boolean} [disableAutoFocus=false] - If set to `true` the
|
|
30
|
+
* notification banner will not be focussed when the page loads. This only
|
|
31
|
+
* applies if the component has a `role` of `alert` – in other cases the
|
|
32
|
+
* component will not be focused on page load, regardless of this option.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @typedef {import('../../common/index.mjs').Schema} Schema
|
|
37
|
+
*/
|
|
38
|
+
NotificationBanner.moduleName = 'govuk-notification-banner';
|
|
39
|
+
NotificationBanner.defaults = Object.freeze({
|
|
40
|
+
disableAutoFocus: false
|
|
41
|
+
});
|
|
42
|
+
NotificationBanner.schema = Object.freeze({
|
|
43
|
+
properties: {
|
|
44
|
+
disableAutoFocus: {
|
|
45
|
+
type: 'boolean'
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
export { NotificationBanner };
|
|
51
|
+
//# sourceMappingURL=notification-banner.mjs.map
|