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,245 @@
|
|
|
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 isInitialised($root, moduleName) {
|
|
8
|
+
return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Checks if GOV.UK Frontend is supported on this page
|
|
13
|
+
*
|
|
14
|
+
* Some browsers will load and run our JavaScript but GOV.UK Frontend
|
|
15
|
+
* won't be supported.
|
|
16
|
+
*
|
|
17
|
+
* @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support
|
|
18
|
+
* @returns {boolean} Whether GOV.UK Frontend is supported on this page
|
|
19
|
+
*/
|
|
20
|
+
function isSupported($scope = document.body) {
|
|
21
|
+
if (!$scope) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
return $scope.classList.contains('govuk-frontend-supported');
|
|
25
|
+
}
|
|
26
|
+
function formatErrorMessage(Component, message) {
|
|
27
|
+
return `${Component.moduleName}: ${message}`;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Schema for component config
|
|
32
|
+
*
|
|
33
|
+
* @typedef {object} Schema
|
|
34
|
+
* @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties
|
|
35
|
+
* @property {SchemaCondition[]} [anyOf] - List of schema conditions
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Schema property for component config
|
|
40
|
+
*
|
|
41
|
+
* @typedef {object} SchemaProperty
|
|
42
|
+
* @property {'string' | 'boolean' | 'number' | 'object'} type - Property type
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Schema condition for component config
|
|
47
|
+
*
|
|
48
|
+
* @typedef {object} SchemaCondition
|
|
49
|
+
* @property {string[]} required - List of required config fields
|
|
50
|
+
* @property {string} errorMessage - Error message when required config fields not provided
|
|
51
|
+
*/
|
|
52
|
+
/**
|
|
53
|
+
* @typedef ComponentWithModuleName
|
|
54
|
+
* @property {string} moduleName - Name of the component
|
|
55
|
+
*/
|
|
56
|
+
|
|
57
|
+
class GOVUKFrontendError extends Error {
|
|
58
|
+
constructor(...args) {
|
|
59
|
+
super(...args);
|
|
60
|
+
this.name = 'GOVUKFrontendError';
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
class SupportError extends GOVUKFrontendError {
|
|
64
|
+
/**
|
|
65
|
+
* Checks if GOV.UK Frontend is supported on this page
|
|
66
|
+
*
|
|
67
|
+
* @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support
|
|
68
|
+
*/
|
|
69
|
+
constructor($scope = document.body) {
|
|
70
|
+
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';
|
|
71
|
+
super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type="module">`');
|
|
72
|
+
this.name = 'SupportError';
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
class ElementError extends GOVUKFrontendError {
|
|
76
|
+
constructor(messageOrOptions) {
|
|
77
|
+
let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';
|
|
78
|
+
if (typeof messageOrOptions === 'object') {
|
|
79
|
+
const {
|
|
80
|
+
component,
|
|
81
|
+
identifier,
|
|
82
|
+
element,
|
|
83
|
+
expectedType
|
|
84
|
+
} = messageOrOptions;
|
|
85
|
+
message = identifier;
|
|
86
|
+
message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';
|
|
87
|
+
message = formatErrorMessage(component, message);
|
|
88
|
+
}
|
|
89
|
+
super(message);
|
|
90
|
+
this.name = 'ElementError';
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
class InitError extends GOVUKFrontendError {
|
|
94
|
+
constructor(componentOrMessage) {
|
|
95
|
+
const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\`$root\`) already initialised`);
|
|
96
|
+
super(message);
|
|
97
|
+
this.name = 'InitError';
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* @typedef {import('../common/index.mjs').ComponentWithModuleName} ComponentWithModuleName
|
|
102
|
+
*/
|
|
103
|
+
|
|
104
|
+
class GOVUKFrontendComponent {
|
|
105
|
+
/**
|
|
106
|
+
* Returns the root element of the component
|
|
107
|
+
*
|
|
108
|
+
* @protected
|
|
109
|
+
* @returns {RootElementType} - the root element of component
|
|
110
|
+
*/
|
|
111
|
+
get $root() {
|
|
112
|
+
return this._$root;
|
|
113
|
+
}
|
|
114
|
+
constructor($root) {
|
|
115
|
+
this._$root = void 0;
|
|
116
|
+
const childConstructor = this.constructor;
|
|
117
|
+
if (typeof childConstructor.moduleName !== 'string') {
|
|
118
|
+
throw new InitError(`\`moduleName\` not defined in component`);
|
|
119
|
+
}
|
|
120
|
+
if (!($root instanceof childConstructor.elementType)) {
|
|
121
|
+
throw new ElementError({
|
|
122
|
+
element: $root,
|
|
123
|
+
component: childConstructor,
|
|
124
|
+
identifier: 'Root element (`$root`)',
|
|
125
|
+
expectedType: childConstructor.elementType.name
|
|
126
|
+
});
|
|
127
|
+
} else {
|
|
128
|
+
this._$root = $root;
|
|
129
|
+
}
|
|
130
|
+
childConstructor.checkSupport();
|
|
131
|
+
this.checkInitialised();
|
|
132
|
+
const moduleName = childConstructor.moduleName;
|
|
133
|
+
this.$root.setAttribute(`data-${moduleName}-init`, '');
|
|
134
|
+
}
|
|
135
|
+
checkInitialised() {
|
|
136
|
+
const constructor = this.constructor;
|
|
137
|
+
const moduleName = constructor.moduleName;
|
|
138
|
+
if (moduleName && isInitialised(this.$root, moduleName)) {
|
|
139
|
+
throw new InitError(constructor);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
static checkSupport() {
|
|
143
|
+
if (!isSupported()) {
|
|
144
|
+
throw new SupportError();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* @typedef ChildClass
|
|
151
|
+
* @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component
|
|
152
|
+
*/
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* @typedef {typeof GOVUKFrontendComponent & ChildClass} ChildClassConstructor
|
|
156
|
+
*/
|
|
157
|
+
GOVUKFrontendComponent.elementType = HTMLElement;
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Radios component
|
|
161
|
+
*
|
|
162
|
+
* @preserve
|
|
163
|
+
*/
|
|
164
|
+
class Radios extends GOVUKFrontendComponent {
|
|
165
|
+
/**
|
|
166
|
+
* Radios can be associated with a 'conditionally revealed' content block –
|
|
167
|
+
* for example, a radio for 'Phone' could reveal an additional form field for
|
|
168
|
+
* the user to enter their phone number.
|
|
169
|
+
*
|
|
170
|
+
* These associations are made using a `data-aria-controls` attribute, which
|
|
171
|
+
* is promoted to an aria-controls attribute during initialisation.
|
|
172
|
+
*
|
|
173
|
+
* We also need to restore the state of any conditional reveals on the page
|
|
174
|
+
* (for example if the user has navigated back), and set up event handlers to
|
|
175
|
+
* keep the reveal in sync with the radio state.
|
|
176
|
+
*
|
|
177
|
+
* @param {Element | null} $root - HTML element to use for radios
|
|
178
|
+
*/
|
|
179
|
+
constructor($root) {
|
|
180
|
+
super($root);
|
|
181
|
+
this.$inputs = void 0;
|
|
182
|
+
const $inputs = this.$root.querySelectorAll('input[type="radio"]');
|
|
183
|
+
if (!$inputs.length) {
|
|
184
|
+
throw new ElementError({
|
|
185
|
+
component: Radios,
|
|
186
|
+
identifier: 'Form inputs (`<input type="radio">`)'
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
this.$inputs = $inputs;
|
|
190
|
+
this.$inputs.forEach($input => {
|
|
191
|
+
const targetId = $input.getAttribute('data-aria-controls');
|
|
192
|
+
if (!targetId) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
if (!document.getElementById(targetId)) {
|
|
196
|
+
throw new ElementError({
|
|
197
|
+
component: Radios,
|
|
198
|
+
identifier: `Conditional reveal (\`id="${targetId}"\`)`
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
$input.setAttribute('aria-controls', targetId);
|
|
202
|
+
$input.removeAttribute('data-aria-controls');
|
|
203
|
+
});
|
|
204
|
+
window.addEventListener('pageshow', () => this.syncAllConditionalReveals());
|
|
205
|
+
this.syncAllConditionalReveals();
|
|
206
|
+
this.$root.addEventListener('click', event => this.handleClick(event));
|
|
207
|
+
}
|
|
208
|
+
syncAllConditionalReveals() {
|
|
209
|
+
this.$inputs.forEach($input => this.syncConditionalRevealWithInputState($input));
|
|
210
|
+
}
|
|
211
|
+
syncConditionalRevealWithInputState($input) {
|
|
212
|
+
const targetId = $input.getAttribute('aria-controls');
|
|
213
|
+
if (!targetId) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const $target = document.getElementById(targetId);
|
|
217
|
+
if ($target != null && $target.classList.contains('govuk-radios__conditional')) {
|
|
218
|
+
const inputIsChecked = $input.checked;
|
|
219
|
+
$input.setAttribute('aria-expanded', inputIsChecked.toString());
|
|
220
|
+
$target.classList.toggle('govuk-radios__conditional--hidden', !inputIsChecked);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
handleClick(event) {
|
|
224
|
+
const $clickedInput = event.target;
|
|
225
|
+
if (!($clickedInput instanceof HTMLInputElement) || $clickedInput.type !== 'radio') {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
const $allInputs = document.querySelectorAll('input[type="radio"][aria-controls]');
|
|
229
|
+
const $clickedInputForm = $clickedInput.form;
|
|
230
|
+
const $clickedInputName = $clickedInput.name;
|
|
231
|
+
$allInputs.forEach($input => {
|
|
232
|
+
const hasSameFormOwner = $input.form === $clickedInputForm;
|
|
233
|
+
const hasSameName = $input.name === $clickedInputName;
|
|
234
|
+
if (hasSameName && hasSameFormOwner) {
|
|
235
|
+
this.syncConditionalRevealWithInputState($input);
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
Radios.moduleName = 'govuk-radios';
|
|
241
|
+
|
|
242
|
+
exports.Radios = Radios;
|
|
243
|
+
|
|
244
|
+
}));
|
|
245
|
+
//# sourceMappingURL=radios.bundle.js.map
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
function isInitialised($root, moduleName) {
|
|
2
|
+
return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Checks if GOV.UK Frontend is supported on this page
|
|
7
|
+
*
|
|
8
|
+
* Some browsers will load and run our JavaScript but GOV.UK Frontend
|
|
9
|
+
* won't be supported.
|
|
10
|
+
*
|
|
11
|
+
* @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support
|
|
12
|
+
* @returns {boolean} Whether GOV.UK Frontend is supported on this page
|
|
13
|
+
*/
|
|
14
|
+
function isSupported($scope = document.body) {
|
|
15
|
+
if (!$scope) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return $scope.classList.contains('govuk-frontend-supported');
|
|
19
|
+
}
|
|
20
|
+
function formatErrorMessage(Component, message) {
|
|
21
|
+
return `${Component.moduleName}: ${message}`;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Schema for component config
|
|
26
|
+
*
|
|
27
|
+
* @typedef {object} Schema
|
|
28
|
+
* @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties
|
|
29
|
+
* @property {SchemaCondition[]} [anyOf] - List of schema conditions
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Schema property for component config
|
|
34
|
+
*
|
|
35
|
+
* @typedef {object} SchemaProperty
|
|
36
|
+
* @property {'string' | 'boolean' | 'number' | 'object'} type - Property type
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Schema condition for component config
|
|
41
|
+
*
|
|
42
|
+
* @typedef {object} SchemaCondition
|
|
43
|
+
* @property {string[]} required - List of required config fields
|
|
44
|
+
* @property {string} errorMessage - Error message when required config fields not provided
|
|
45
|
+
*/
|
|
46
|
+
/**
|
|
47
|
+
* @typedef ComponentWithModuleName
|
|
48
|
+
* @property {string} moduleName - Name of the component
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
class GOVUKFrontendError extends Error {
|
|
52
|
+
constructor(...args) {
|
|
53
|
+
super(...args);
|
|
54
|
+
this.name = 'GOVUKFrontendError';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
class SupportError extends GOVUKFrontendError {
|
|
58
|
+
/**
|
|
59
|
+
* Checks if GOV.UK Frontend is supported on this page
|
|
60
|
+
*
|
|
61
|
+
* @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support
|
|
62
|
+
*/
|
|
63
|
+
constructor($scope = document.body) {
|
|
64
|
+
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';
|
|
65
|
+
super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type="module">`');
|
|
66
|
+
this.name = 'SupportError';
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
class ElementError extends GOVUKFrontendError {
|
|
70
|
+
constructor(messageOrOptions) {
|
|
71
|
+
let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';
|
|
72
|
+
if (typeof messageOrOptions === 'object') {
|
|
73
|
+
const {
|
|
74
|
+
component,
|
|
75
|
+
identifier,
|
|
76
|
+
element,
|
|
77
|
+
expectedType
|
|
78
|
+
} = messageOrOptions;
|
|
79
|
+
message = identifier;
|
|
80
|
+
message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';
|
|
81
|
+
message = formatErrorMessage(component, message);
|
|
82
|
+
}
|
|
83
|
+
super(message);
|
|
84
|
+
this.name = 'ElementError';
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
class InitError extends GOVUKFrontendError {
|
|
88
|
+
constructor(componentOrMessage) {
|
|
89
|
+
const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\`$root\`) already initialised`);
|
|
90
|
+
super(message);
|
|
91
|
+
this.name = 'InitError';
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* @typedef {import('../common/index.mjs').ComponentWithModuleName} ComponentWithModuleName
|
|
96
|
+
*/
|
|
97
|
+
|
|
98
|
+
class GOVUKFrontendComponent {
|
|
99
|
+
/**
|
|
100
|
+
* Returns the root element of the component
|
|
101
|
+
*
|
|
102
|
+
* @protected
|
|
103
|
+
* @returns {RootElementType} - the root element of component
|
|
104
|
+
*/
|
|
105
|
+
get $root() {
|
|
106
|
+
return this._$root;
|
|
107
|
+
}
|
|
108
|
+
constructor($root) {
|
|
109
|
+
this._$root = void 0;
|
|
110
|
+
const childConstructor = this.constructor;
|
|
111
|
+
if (typeof childConstructor.moduleName !== 'string') {
|
|
112
|
+
throw new InitError(`\`moduleName\` not defined in component`);
|
|
113
|
+
}
|
|
114
|
+
if (!($root instanceof childConstructor.elementType)) {
|
|
115
|
+
throw new ElementError({
|
|
116
|
+
element: $root,
|
|
117
|
+
component: childConstructor,
|
|
118
|
+
identifier: 'Root element (`$root`)',
|
|
119
|
+
expectedType: childConstructor.elementType.name
|
|
120
|
+
});
|
|
121
|
+
} else {
|
|
122
|
+
this._$root = $root;
|
|
123
|
+
}
|
|
124
|
+
childConstructor.checkSupport();
|
|
125
|
+
this.checkInitialised();
|
|
126
|
+
const moduleName = childConstructor.moduleName;
|
|
127
|
+
this.$root.setAttribute(`data-${moduleName}-init`, '');
|
|
128
|
+
}
|
|
129
|
+
checkInitialised() {
|
|
130
|
+
const constructor = this.constructor;
|
|
131
|
+
const moduleName = constructor.moduleName;
|
|
132
|
+
if (moduleName && isInitialised(this.$root, moduleName)) {
|
|
133
|
+
throw new InitError(constructor);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
static checkSupport() {
|
|
137
|
+
if (!isSupported()) {
|
|
138
|
+
throw new SupportError();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* @typedef ChildClass
|
|
145
|
+
* @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component
|
|
146
|
+
*/
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* @typedef {typeof GOVUKFrontendComponent & ChildClass} ChildClassConstructor
|
|
150
|
+
*/
|
|
151
|
+
GOVUKFrontendComponent.elementType = HTMLElement;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Radios component
|
|
155
|
+
*
|
|
156
|
+
* @preserve
|
|
157
|
+
*/
|
|
158
|
+
class Radios extends GOVUKFrontendComponent {
|
|
159
|
+
/**
|
|
160
|
+
* Radios can be associated with a 'conditionally revealed' content block –
|
|
161
|
+
* for example, a radio for 'Phone' could reveal an additional form field for
|
|
162
|
+
* the user to enter their phone number.
|
|
163
|
+
*
|
|
164
|
+
* These associations are made using a `data-aria-controls` attribute, which
|
|
165
|
+
* is promoted to an aria-controls attribute during initialisation.
|
|
166
|
+
*
|
|
167
|
+
* We also need to restore the state of any conditional reveals on the page
|
|
168
|
+
* (for example if the user has navigated back), and set up event handlers to
|
|
169
|
+
* keep the reveal in sync with the radio state.
|
|
170
|
+
*
|
|
171
|
+
* @param {Element | null} $root - HTML element to use for radios
|
|
172
|
+
*/
|
|
173
|
+
constructor($root) {
|
|
174
|
+
super($root);
|
|
175
|
+
this.$inputs = void 0;
|
|
176
|
+
const $inputs = this.$root.querySelectorAll('input[type="radio"]');
|
|
177
|
+
if (!$inputs.length) {
|
|
178
|
+
throw new ElementError({
|
|
179
|
+
component: Radios,
|
|
180
|
+
identifier: 'Form inputs (`<input type="radio">`)'
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
this.$inputs = $inputs;
|
|
184
|
+
this.$inputs.forEach($input => {
|
|
185
|
+
const targetId = $input.getAttribute('data-aria-controls');
|
|
186
|
+
if (!targetId) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (!document.getElementById(targetId)) {
|
|
190
|
+
throw new ElementError({
|
|
191
|
+
component: Radios,
|
|
192
|
+
identifier: `Conditional reveal (\`id="${targetId}"\`)`
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
$input.setAttribute('aria-controls', targetId);
|
|
196
|
+
$input.removeAttribute('data-aria-controls');
|
|
197
|
+
});
|
|
198
|
+
window.addEventListener('pageshow', () => this.syncAllConditionalReveals());
|
|
199
|
+
this.syncAllConditionalReveals();
|
|
200
|
+
this.$root.addEventListener('click', event => this.handleClick(event));
|
|
201
|
+
}
|
|
202
|
+
syncAllConditionalReveals() {
|
|
203
|
+
this.$inputs.forEach($input => this.syncConditionalRevealWithInputState($input));
|
|
204
|
+
}
|
|
205
|
+
syncConditionalRevealWithInputState($input) {
|
|
206
|
+
const targetId = $input.getAttribute('aria-controls');
|
|
207
|
+
if (!targetId) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
const $target = document.getElementById(targetId);
|
|
211
|
+
if ($target != null && $target.classList.contains('govuk-radios__conditional')) {
|
|
212
|
+
const inputIsChecked = $input.checked;
|
|
213
|
+
$input.setAttribute('aria-expanded', inputIsChecked.toString());
|
|
214
|
+
$target.classList.toggle('govuk-radios__conditional--hidden', !inputIsChecked);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
handleClick(event) {
|
|
218
|
+
const $clickedInput = event.target;
|
|
219
|
+
if (!($clickedInput instanceof HTMLInputElement) || $clickedInput.type !== 'radio') {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
const $allInputs = document.querySelectorAll('input[type="radio"][aria-controls]');
|
|
223
|
+
const $clickedInputForm = $clickedInput.form;
|
|
224
|
+
const $clickedInputName = $clickedInput.name;
|
|
225
|
+
$allInputs.forEach($input => {
|
|
226
|
+
const hasSameFormOwner = $input.form === $clickedInputForm;
|
|
227
|
+
const hasSameName = $input.name === $clickedInputName;
|
|
228
|
+
if (hasSameName && hasSameFormOwner) {
|
|
229
|
+
this.syncConditionalRevealWithInputState($input);
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
Radios.moduleName = 'govuk-radios';
|
|
235
|
+
|
|
236
|
+
export { Radios };
|
|
237
|
+
//# sourceMappingURL=radios.bundle.mjs.map
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { ElementError } from '../../errors/index.mjs';
|
|
2
|
+
import { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Radios component
|
|
6
|
+
*
|
|
7
|
+
* @preserve
|
|
8
|
+
*/
|
|
9
|
+
class Radios extends GOVUKFrontendComponent {
|
|
10
|
+
/**
|
|
11
|
+
* Radios can be associated with a 'conditionally revealed' content block –
|
|
12
|
+
* for example, a radio for 'Phone' could reveal an additional form field for
|
|
13
|
+
* the user to enter their phone number.
|
|
14
|
+
*
|
|
15
|
+
* These associations are made using a `data-aria-controls` attribute, which
|
|
16
|
+
* is promoted to an aria-controls attribute during initialisation.
|
|
17
|
+
*
|
|
18
|
+
* We also need to restore the state of any conditional reveals on the page
|
|
19
|
+
* (for example if the user has navigated back), and set up event handlers to
|
|
20
|
+
* keep the reveal in sync with the radio state.
|
|
21
|
+
*
|
|
22
|
+
* @param {Element | null} $root - HTML element to use for radios
|
|
23
|
+
*/
|
|
24
|
+
constructor($root) {
|
|
25
|
+
super($root);
|
|
26
|
+
this.$inputs = void 0;
|
|
27
|
+
const $inputs = this.$root.querySelectorAll('input[type="radio"]');
|
|
28
|
+
if (!$inputs.length) {
|
|
29
|
+
throw new ElementError({
|
|
30
|
+
component: Radios,
|
|
31
|
+
identifier: 'Form inputs (`<input type="radio">`)'
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
this.$inputs = $inputs;
|
|
35
|
+
this.$inputs.forEach($input => {
|
|
36
|
+
const targetId = $input.getAttribute('data-aria-controls');
|
|
37
|
+
if (!targetId) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (!document.getElementById(targetId)) {
|
|
41
|
+
throw new ElementError({
|
|
42
|
+
component: Radios,
|
|
43
|
+
identifier: `Conditional reveal (\`id="${targetId}"\`)`
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
$input.setAttribute('aria-controls', targetId);
|
|
47
|
+
$input.removeAttribute('data-aria-controls');
|
|
48
|
+
});
|
|
49
|
+
window.addEventListener('pageshow', () => this.syncAllConditionalReveals());
|
|
50
|
+
this.syncAllConditionalReveals();
|
|
51
|
+
this.$root.addEventListener('click', event => this.handleClick(event));
|
|
52
|
+
}
|
|
53
|
+
syncAllConditionalReveals() {
|
|
54
|
+
this.$inputs.forEach($input => this.syncConditionalRevealWithInputState($input));
|
|
55
|
+
}
|
|
56
|
+
syncConditionalRevealWithInputState($input) {
|
|
57
|
+
const targetId = $input.getAttribute('aria-controls');
|
|
58
|
+
if (!targetId) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const $target = document.getElementById(targetId);
|
|
62
|
+
if ($target != null && $target.classList.contains('govuk-radios__conditional')) {
|
|
63
|
+
const inputIsChecked = $input.checked;
|
|
64
|
+
$input.setAttribute('aria-expanded', inputIsChecked.toString());
|
|
65
|
+
$target.classList.toggle('govuk-radios__conditional--hidden', !inputIsChecked);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
handleClick(event) {
|
|
69
|
+
const $clickedInput = event.target;
|
|
70
|
+
if (!($clickedInput instanceof HTMLInputElement) || $clickedInput.type !== 'radio') {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const $allInputs = document.querySelectorAll('input[type="radio"][aria-controls]');
|
|
74
|
+
const $clickedInputForm = $clickedInput.form;
|
|
75
|
+
const $clickedInputName = $clickedInput.name;
|
|
76
|
+
$allInputs.forEach($input => {
|
|
77
|
+
const hasSameFormOwner = $input.form === $clickedInputForm;
|
|
78
|
+
const hasSameName = $input.name === $clickedInputName;
|
|
79
|
+
if (hasSameName && hasSameFormOwner) {
|
|
80
|
+
this.syncConditionalRevealWithInputState($input);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
Radios.moduleName = 'govuk-radios';
|
|
86
|
+
|
|
87
|
+
export { Radios };
|
|
88
|
+
//# sourceMappingURL=radios.mjs.map
|
|
@@ -6,19 +6,16 @@
|
|
|
6
6
|
.govuk-select {
|
|
7
7
|
@include govuk-font($size: 19, $line-height: 1.25);
|
|
8
8
|
|
|
9
|
-
box-sizing: border-box;
|
|
9
|
+
box-sizing: border-box;
|
|
10
10
|
|
|
11
11
|
// This min-width was chosen because:
|
|
12
|
-
// - it makes the Select
|
|
12
|
+
// - it makes the Select wider than it is tall (which is what users expect)
|
|
13
13
|
// - 11.5em matches the 'length-10' variant of the input component
|
|
14
14
|
// - it fits comfortably on screens as narrow as 240px wide
|
|
15
15
|
min-width: 11.5em;
|
|
16
16
|
max-width: 100%;
|
|
17
|
-
height: 40px;
|
|
18
|
-
|
|
19
|
-
height: govuk-px-to-rem(40px);
|
|
20
|
-
}
|
|
21
|
-
padding: govuk-spacing(1); // was 5px 4px 4px - size of it should be adjusted to match other form elements
|
|
17
|
+
height: govuk-px-to-rem(40px);
|
|
18
|
+
padding: govuk-spacing(1);
|
|
22
19
|
border: $govuk-border-width-form-element solid $govuk-input-border-colour;
|
|
23
20
|
|
|
24
21
|
// Default user agent colours for selects can have low contrast,
|
|
@@ -31,19 +28,13 @@
|
|
|
31
28
|
// Ensure outline appears outside of the element
|
|
32
29
|
outline-offset: 0;
|
|
33
30
|
// Double the border by adding its width again. Use `box-shadow` to do
|
|
34
|
-
// this instead of changing `border-width` (which changes element size)
|
|
35
|
-
// since `outline` is already used for the yellow focus state.
|
|
31
|
+
// this instead of changing `border-width` (which changes element size)
|
|
32
|
+
// and since `outline` is already used for the yellow focus state.
|
|
36
33
|
box-shadow: inset 0 0 0 $govuk-border-width-form-element;
|
|
37
|
-
|
|
38
|
-
@include _govuk-if-ie8 {
|
|
39
|
-
// IE8 doesn't support `box-shadow` so double the border with
|
|
40
|
-
// `border-width`.
|
|
41
|
-
border-width: $govuk-border-width-form-element * 2;
|
|
42
|
-
}
|
|
43
34
|
}
|
|
44
35
|
|
|
45
36
|
&:disabled {
|
|
46
|
-
opacity: .5;
|
|
37
|
+
opacity: 0.5;
|
|
47
38
|
color: inherit;
|
|
48
39
|
cursor: not-allowed;
|
|
49
40
|
}
|
|
@@ -64,3 +55,5 @@
|
|
|
64
55
|
}
|
|
65
56
|
}
|
|
66
57
|
}
|
|
58
|
+
|
|
59
|
+
/*# sourceMappingURL=_index.scss.map */
|