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,295 @@
|
|
|
1
|
+
import { closestAttributeValue } from '../../common/closest-attribute-value.mjs';
|
|
2
|
+
import { mergeConfigs, validateConfig, formatErrorMessage } from '../../common/index.mjs';
|
|
3
|
+
import { normaliseDataset } from '../../common/normalise-dataset.mjs';
|
|
4
|
+
import { ElementError, ConfigError } from '../../errors/index.mjs';
|
|
5
|
+
import { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs';
|
|
6
|
+
import { I18n } from '../../i18n.mjs';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Character count component
|
|
10
|
+
*
|
|
11
|
+
* Tracks the number of characters or words in the `.govuk-js-character-count`
|
|
12
|
+
* `<textarea>` inside the element. Displays a message with the remaining number
|
|
13
|
+
* of characters/words available, or the number of characters/words in excess.
|
|
14
|
+
*
|
|
15
|
+
* You can configure the message to only appear after a certain percentage
|
|
16
|
+
* of the available characters/words has been entered.
|
|
17
|
+
*
|
|
18
|
+
* @preserve
|
|
19
|
+
*/
|
|
20
|
+
class CharacterCount extends GOVUKFrontendComponent {
|
|
21
|
+
/**
|
|
22
|
+
* @param {Element | null} $root - HTML element to use for character count
|
|
23
|
+
* @param {CharacterCountConfig} [config] - Character count config
|
|
24
|
+
*/
|
|
25
|
+
constructor($root, config = {}) {
|
|
26
|
+
var _ref, _this$config$maxwords;
|
|
27
|
+
super($root);
|
|
28
|
+
this.$textarea = void 0;
|
|
29
|
+
this.$visibleCountMessage = void 0;
|
|
30
|
+
this.$screenReaderCountMessage = void 0;
|
|
31
|
+
this.lastInputTimestamp = null;
|
|
32
|
+
this.lastInputValue = '';
|
|
33
|
+
this.valueChecker = null;
|
|
34
|
+
this.config = void 0;
|
|
35
|
+
this.i18n = void 0;
|
|
36
|
+
this.maxLength = void 0;
|
|
37
|
+
const $textarea = this.$root.querySelector('.govuk-js-character-count');
|
|
38
|
+
if (!($textarea instanceof HTMLTextAreaElement || $textarea instanceof HTMLInputElement)) {
|
|
39
|
+
throw new ElementError({
|
|
40
|
+
component: CharacterCount,
|
|
41
|
+
element: $textarea,
|
|
42
|
+
expectedType: 'HTMLTextareaElement or HTMLInputElement',
|
|
43
|
+
identifier: 'Form field (`.govuk-js-character-count`)'
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
const datasetConfig = normaliseDataset(CharacterCount, this.$root.dataset);
|
|
47
|
+
let configOverrides = {};
|
|
48
|
+
if ('maxwords' in datasetConfig || 'maxlength' in datasetConfig) {
|
|
49
|
+
configOverrides = {
|
|
50
|
+
maxlength: undefined,
|
|
51
|
+
maxwords: undefined
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
this.config = mergeConfigs(CharacterCount.defaults, config, configOverrides, datasetConfig);
|
|
55
|
+
const errors = validateConfig(CharacterCount.schema, this.config);
|
|
56
|
+
if (errors[0]) {
|
|
57
|
+
throw new ConfigError(formatErrorMessage(CharacterCount, errors[0]));
|
|
58
|
+
}
|
|
59
|
+
this.i18n = new I18n(this.config.i18n, {
|
|
60
|
+
locale: closestAttributeValue(this.$root, 'lang')
|
|
61
|
+
});
|
|
62
|
+
this.maxLength = (_ref = (_this$config$maxwords = this.config.maxwords) != null ? _this$config$maxwords : this.config.maxlength) != null ? _ref : Infinity;
|
|
63
|
+
this.$textarea = $textarea;
|
|
64
|
+
const textareaDescriptionId = `${this.$textarea.id}-info`;
|
|
65
|
+
const $textareaDescription = document.getElementById(textareaDescriptionId);
|
|
66
|
+
if (!$textareaDescription) {
|
|
67
|
+
throw new ElementError({
|
|
68
|
+
component: CharacterCount,
|
|
69
|
+
element: $textareaDescription,
|
|
70
|
+
identifier: `Count message (\`id="${textareaDescriptionId}"\`)`
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (`${$textareaDescription.textContent}`.match(/^\s*$/)) {
|
|
74
|
+
$textareaDescription.textContent = this.i18n.t('textareaDescription', {
|
|
75
|
+
count: this.maxLength
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
this.$textarea.insertAdjacentElement('afterend', $textareaDescription);
|
|
79
|
+
const $screenReaderCountMessage = document.createElement('div');
|
|
80
|
+
$screenReaderCountMessage.className = 'govuk-character-count__sr-status govuk-visually-hidden';
|
|
81
|
+
$screenReaderCountMessage.setAttribute('aria-live', 'polite');
|
|
82
|
+
this.$screenReaderCountMessage = $screenReaderCountMessage;
|
|
83
|
+
$textareaDescription.insertAdjacentElement('afterend', $screenReaderCountMessage);
|
|
84
|
+
const $visibleCountMessage = document.createElement('div');
|
|
85
|
+
$visibleCountMessage.className = $textareaDescription.className;
|
|
86
|
+
$visibleCountMessage.classList.add('govuk-character-count__status');
|
|
87
|
+
$visibleCountMessage.setAttribute('aria-hidden', 'true');
|
|
88
|
+
this.$visibleCountMessage = $visibleCountMessage;
|
|
89
|
+
$textareaDescription.insertAdjacentElement('afterend', $visibleCountMessage);
|
|
90
|
+
$textareaDescription.classList.add('govuk-visually-hidden');
|
|
91
|
+
this.$textarea.removeAttribute('maxlength');
|
|
92
|
+
this.bindChangeEvents();
|
|
93
|
+
window.addEventListener('pageshow', () => this.updateCountMessage());
|
|
94
|
+
this.updateCountMessage();
|
|
95
|
+
}
|
|
96
|
+
bindChangeEvents() {
|
|
97
|
+
this.$textarea.addEventListener('keyup', () => this.handleKeyUp());
|
|
98
|
+
this.$textarea.addEventListener('focus', () => this.handleFocus());
|
|
99
|
+
this.$textarea.addEventListener('blur', () => this.handleBlur());
|
|
100
|
+
}
|
|
101
|
+
handleKeyUp() {
|
|
102
|
+
this.updateVisibleCountMessage();
|
|
103
|
+
this.lastInputTimestamp = Date.now();
|
|
104
|
+
}
|
|
105
|
+
handleFocus() {
|
|
106
|
+
this.valueChecker = window.setInterval(() => {
|
|
107
|
+
if (!this.lastInputTimestamp || Date.now() - 500 >= this.lastInputTimestamp) {
|
|
108
|
+
this.updateIfValueChanged();
|
|
109
|
+
}
|
|
110
|
+
}, 1000);
|
|
111
|
+
}
|
|
112
|
+
handleBlur() {
|
|
113
|
+
if (this.valueChecker) {
|
|
114
|
+
window.clearInterval(this.valueChecker);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
updateIfValueChanged() {
|
|
118
|
+
if (this.$textarea.value !== this.lastInputValue) {
|
|
119
|
+
this.lastInputValue = this.$textarea.value;
|
|
120
|
+
this.updateCountMessage();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
updateCountMessage() {
|
|
124
|
+
this.updateVisibleCountMessage();
|
|
125
|
+
this.updateScreenReaderCountMessage();
|
|
126
|
+
}
|
|
127
|
+
updateVisibleCountMessage() {
|
|
128
|
+
const remainingNumber = this.maxLength - this.count(this.$textarea.value);
|
|
129
|
+
const isError = remainingNumber < 0;
|
|
130
|
+
this.$visibleCountMessage.classList.toggle('govuk-character-count__message--disabled', !this.isOverThreshold());
|
|
131
|
+
this.$textarea.classList.toggle('govuk-textarea--error', isError);
|
|
132
|
+
this.$visibleCountMessage.classList.toggle('govuk-error-message', isError);
|
|
133
|
+
this.$visibleCountMessage.classList.toggle('govuk-hint', !isError);
|
|
134
|
+
this.$visibleCountMessage.textContent = this.getCountMessage();
|
|
135
|
+
}
|
|
136
|
+
updateScreenReaderCountMessage() {
|
|
137
|
+
if (this.isOverThreshold()) {
|
|
138
|
+
this.$screenReaderCountMessage.removeAttribute('aria-hidden');
|
|
139
|
+
} else {
|
|
140
|
+
this.$screenReaderCountMessage.setAttribute('aria-hidden', 'true');
|
|
141
|
+
}
|
|
142
|
+
this.$screenReaderCountMessage.textContent = this.getCountMessage();
|
|
143
|
+
}
|
|
144
|
+
count(text) {
|
|
145
|
+
if (this.config.maxwords) {
|
|
146
|
+
var _text$match;
|
|
147
|
+
const tokens = (_text$match = text.match(/\S+/g)) != null ? _text$match : [];
|
|
148
|
+
return tokens.length;
|
|
149
|
+
}
|
|
150
|
+
return text.length;
|
|
151
|
+
}
|
|
152
|
+
getCountMessage() {
|
|
153
|
+
const remainingNumber = this.maxLength - this.count(this.$textarea.value);
|
|
154
|
+
const countType = this.config.maxwords ? 'words' : 'characters';
|
|
155
|
+
return this.formatCountMessage(remainingNumber, countType);
|
|
156
|
+
}
|
|
157
|
+
formatCountMessage(remainingNumber, countType) {
|
|
158
|
+
if (remainingNumber === 0) {
|
|
159
|
+
return this.i18n.t(`${countType}AtLimit`);
|
|
160
|
+
}
|
|
161
|
+
const translationKeySuffix = remainingNumber < 0 ? 'OverLimit' : 'UnderLimit';
|
|
162
|
+
return this.i18n.t(`${countType}${translationKeySuffix}`, {
|
|
163
|
+
count: Math.abs(remainingNumber)
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
isOverThreshold() {
|
|
167
|
+
if (!this.config.threshold) {
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
const currentLength = this.count(this.$textarea.value);
|
|
171
|
+
const maxLength = this.maxLength;
|
|
172
|
+
const thresholdValue = maxLength * this.config.threshold / 100;
|
|
173
|
+
return thresholdValue <= currentLength;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Character count config
|
|
179
|
+
*
|
|
180
|
+
* @see {@link CharacterCount.defaults}
|
|
181
|
+
* @typedef {object} CharacterCountConfig
|
|
182
|
+
* @property {number} [maxlength] - The maximum number of characters.
|
|
183
|
+
* If maxwords is provided, the maxlength option will be ignored.
|
|
184
|
+
* @property {number} [maxwords] - The maximum number of words. If maxwords is
|
|
185
|
+
* provided, the maxlength option will be ignored.
|
|
186
|
+
* @property {number} [threshold=0] - The percentage value of the limit at
|
|
187
|
+
* which point the count message is displayed. If this attribute is set, the
|
|
188
|
+
* count message will be hidden by default.
|
|
189
|
+
* @property {CharacterCountTranslations} [i18n=CharacterCount.defaults.i18n] - Character count translations
|
|
190
|
+
*/
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Character count translations
|
|
194
|
+
*
|
|
195
|
+
* @see {@link CharacterCount.defaults.i18n}
|
|
196
|
+
* @typedef {object} CharacterCountTranslations
|
|
197
|
+
*
|
|
198
|
+
* Messages shown to users as they type. It provides feedback on how many words
|
|
199
|
+
* or characters they have remaining or if they are over the limit. This also
|
|
200
|
+
* includes a message used as an accessible description for the textarea.
|
|
201
|
+
* @property {TranslationPluralForms} [charactersUnderLimit] - Message displayed
|
|
202
|
+
* when the number of characters is under the configured maximum, `maxlength`.
|
|
203
|
+
* This message is displayed visually and through assistive technologies. The
|
|
204
|
+
* component will replace the `%{count}` placeholder with the number of
|
|
205
|
+
* remaining characters. This is a [pluralised list of
|
|
206
|
+
* messages](https://frontend.design-system.service.gov.uk/localise-govuk-frontend).
|
|
207
|
+
* @property {string} [charactersAtLimit] - Message displayed when the number of
|
|
208
|
+
* characters reaches the configured maximum, `maxlength`. This message is
|
|
209
|
+
* displayed visually and through assistive technologies.
|
|
210
|
+
* @property {TranslationPluralForms} [charactersOverLimit] - Message displayed
|
|
211
|
+
* when the number of characters is over the configured maximum, `maxlength`.
|
|
212
|
+
* This message is displayed visually and through assistive technologies. The
|
|
213
|
+
* component will replace the `%{count}` placeholder with the number of
|
|
214
|
+
* remaining characters. This is a [pluralised list of
|
|
215
|
+
* messages](https://frontend.design-system.service.gov.uk/localise-govuk-frontend).
|
|
216
|
+
* @property {TranslationPluralForms} [wordsUnderLimit] - Message displayed when
|
|
217
|
+
* the number of words is under the configured maximum, `maxlength`. This
|
|
218
|
+
* message is displayed visually and through assistive technologies. The
|
|
219
|
+
* component will replace the `%{count}` placeholder with the number of
|
|
220
|
+
* remaining words. This is a [pluralised list of
|
|
221
|
+
* messages](https://frontend.design-system.service.gov.uk/localise-govuk-frontend).
|
|
222
|
+
* @property {string} [wordsAtLimit] - Message displayed when the number of
|
|
223
|
+
* words reaches the configured maximum, `maxlength`. This message is
|
|
224
|
+
* displayed visually and through assistive technologies.
|
|
225
|
+
* @property {TranslationPluralForms} [wordsOverLimit] - Message displayed when
|
|
226
|
+
* the number of words is over the configured maximum, `maxlength`. This
|
|
227
|
+
* message is displayed visually and through assistive technologies. The
|
|
228
|
+
* component will replace the `%{count}` placeholder with the number of
|
|
229
|
+
* remaining words. This is a [pluralised list of
|
|
230
|
+
* messages](https://frontend.design-system.service.gov.uk/localise-govuk-frontend).
|
|
231
|
+
* @property {TranslationPluralForms} [textareaDescription] - Message made
|
|
232
|
+
* available to assistive technologies, if none is already present in the
|
|
233
|
+
* HTML, to describe that the component accepts only a limited amount of
|
|
234
|
+
* content. It is visible on the page when JavaScript is unavailable. The
|
|
235
|
+
* component will replace the `%{count}` placeholder with the value of the
|
|
236
|
+
* `maxlength` or `maxwords` parameter.
|
|
237
|
+
*/
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* @typedef {import('../../common/index.mjs').Schema} Schema
|
|
241
|
+
* @typedef {import('../../i18n.mjs').TranslationPluralForms} TranslationPluralForms
|
|
242
|
+
*/
|
|
243
|
+
CharacterCount.moduleName = 'govuk-character-count';
|
|
244
|
+
CharacterCount.defaults = Object.freeze({
|
|
245
|
+
threshold: 0,
|
|
246
|
+
i18n: {
|
|
247
|
+
charactersUnderLimit: {
|
|
248
|
+
one: 'You have %{count} character remaining',
|
|
249
|
+
other: 'You have %{count} characters remaining'
|
|
250
|
+
},
|
|
251
|
+
charactersAtLimit: 'You have 0 characters remaining',
|
|
252
|
+
charactersOverLimit: {
|
|
253
|
+
one: 'You have %{count} character too many',
|
|
254
|
+
other: 'You have %{count} characters too many'
|
|
255
|
+
},
|
|
256
|
+
wordsUnderLimit: {
|
|
257
|
+
one: 'You have %{count} word remaining',
|
|
258
|
+
other: 'You have %{count} words remaining'
|
|
259
|
+
},
|
|
260
|
+
wordsAtLimit: 'You have 0 words remaining',
|
|
261
|
+
wordsOverLimit: {
|
|
262
|
+
one: 'You have %{count} word too many',
|
|
263
|
+
other: 'You have %{count} words too many'
|
|
264
|
+
},
|
|
265
|
+
textareaDescription: {
|
|
266
|
+
other: ''
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
CharacterCount.schema = Object.freeze({
|
|
271
|
+
properties: {
|
|
272
|
+
i18n: {
|
|
273
|
+
type: 'object'
|
|
274
|
+
},
|
|
275
|
+
maxwords: {
|
|
276
|
+
type: 'number'
|
|
277
|
+
},
|
|
278
|
+
maxlength: {
|
|
279
|
+
type: 'number'
|
|
280
|
+
},
|
|
281
|
+
threshold: {
|
|
282
|
+
type: 'number'
|
|
283
|
+
}
|
|
284
|
+
},
|
|
285
|
+
anyOf: [{
|
|
286
|
+
required: ['maxwords'],
|
|
287
|
+
errorMessage: 'Either "maxlength" or "maxwords" must be provided'
|
|
288
|
+
}, {
|
|
289
|
+
required: ['maxlength'],
|
|
290
|
+
errorMessage: 'Either "maxlength" or "maxwords" must be provided'
|
|
291
|
+
}]
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
export { CharacterCount };
|
|
295
|
+
//# sourceMappingURL=character-count.mjs.map
|
|
@@ -4,24 +4,18 @@
|
|
|
4
4
|
@import "../label/index";
|
|
5
5
|
|
|
6
6
|
@include govuk-exports("govuk/component/checkboxes") {
|
|
7
|
-
|
|
8
|
-
$govuk-touch-target-size: 44px;
|
|
7
|
+
$govuk-touch-target-gutter: 4px;
|
|
9
8
|
$govuk-checkboxes-size: 40px;
|
|
9
|
+
$govuk-touch-target-size: ($govuk-checkboxes-size + $govuk-touch-target-gutter);
|
|
10
10
|
$govuk-small-checkboxes-size: 24px;
|
|
11
11
|
$govuk-checkboxes-label-padding-left-right: govuk-spacing(3);
|
|
12
|
+
$govuk-checkbox-check-horizontal-position: 10px;
|
|
12
13
|
|
|
13
14
|
.govuk-checkboxes__item {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
display: block;
|
|
15
|
+
display: flex;
|
|
16
|
+
flex-wrap: wrap;
|
|
17
17
|
position: relative;
|
|
18
|
-
|
|
19
|
-
min-height: $govuk-checkboxes-size;
|
|
20
|
-
|
|
21
18
|
margin-bottom: govuk-spacing(2);
|
|
22
|
-
padding-left: $govuk-checkboxes-size;
|
|
23
|
-
|
|
24
|
-
clear: left;
|
|
25
19
|
}
|
|
26
20
|
|
|
27
21
|
.govuk-checkboxes__item:last-child,
|
|
@@ -30,102 +24,86 @@
|
|
|
30
24
|
}
|
|
31
25
|
|
|
32
26
|
.govuk-checkboxes__input {
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
// Allow the input to sit above the label, enabling its proper detection
|
|
28
|
+
// when exploring by touch or using automation tools like Selenium
|
|
29
|
+
z-index: 1;
|
|
30
|
+
width: $govuk-touch-target-size;
|
|
31
|
+
height: $govuk-touch-target-size;
|
|
32
|
+
margin: 0;
|
|
33
|
+
opacity: 0;
|
|
35
34
|
cursor: pointer;
|
|
36
|
-
|
|
37
|
-
// IE8 doesn’t support pseudo-elements, so we don’t want to hide native
|
|
38
|
-
// elements there.
|
|
39
|
-
@include _govuk-not-ie8 {
|
|
40
|
-
position: absolute;
|
|
41
|
-
|
|
42
|
-
z-index: 1;
|
|
43
|
-
top: $input-offset * -1;
|
|
44
|
-
left: $input-offset * -1;
|
|
45
|
-
|
|
46
|
-
width: $govuk-touch-target-size;
|
|
47
|
-
height: $govuk-touch-target-size;
|
|
48
|
-
margin: 0;
|
|
49
|
-
|
|
50
|
-
opacity: 0;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
@include _govuk-if-ie8 {
|
|
54
|
-
margin-top: 10px;
|
|
55
|
-
margin-right: $govuk-checkboxes-size / -2;
|
|
56
|
-
margin-left: $govuk-checkboxes-size / -2;
|
|
57
|
-
float: left;
|
|
58
|
-
|
|
59
|
-
// add focus outline to input
|
|
60
|
-
&:focus {
|
|
61
|
-
outline: $govuk-focus-width solid $govuk-focus-colour;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
35
|
}
|
|
65
36
|
|
|
66
37
|
.govuk-checkboxes__label {
|
|
67
|
-
|
|
38
|
+
align-self: center;
|
|
39
|
+
|
|
40
|
+
// Ensure that the width of the label is never more than the width of the
|
|
41
|
+
// container minus the input width minus the padding on either side of
|
|
42
|
+
// the label. This prevents the label from going onto the next line due to
|
|
43
|
+
// __item using flex-wrap because we want hints on a separate line.
|
|
44
|
+
max-width: calc(100% - #{(($govuk-checkboxes-label-padding-left-right * 2) + $govuk-touch-target-size)});
|
|
68
45
|
margin-bottom: 0;
|
|
69
|
-
padding:
|
|
46
|
+
padding: (govuk-spacing(1) + $govuk-border-width-form-element) govuk-spacing(3);
|
|
70
47
|
cursor: pointer;
|
|
71
48
|
// remove 300ms pause on mobile
|
|
72
|
-
|
|
73
|
-
touch-action: manipulation;
|
|
49
|
+
touch-action: manipulation;
|
|
74
50
|
}
|
|
75
51
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// ✔ Check mark
|
|
91
|
-
//
|
|
92
|
-
// The check mark is a box with a border on the left and bottom side (└──),
|
|
93
|
-
// rotated 45 degrees
|
|
94
|
-
.govuk-checkboxes__label:after {
|
|
95
|
-
content: "";
|
|
96
|
-
box-sizing: border-box;
|
|
97
|
-
|
|
98
|
-
position: absolute;
|
|
99
|
-
top: 11px;
|
|
100
|
-
left: 9px;
|
|
101
|
-
width: 23px;
|
|
102
|
-
height: 12px;
|
|
103
|
-
|
|
104
|
-
-webkit-transform: rotate(-45deg);
|
|
105
|
-
|
|
106
|
-
-ms-transform: rotate(-45deg);
|
|
107
|
-
|
|
108
|
-
transform: rotate(-45deg);
|
|
109
|
-
border: solid;
|
|
110
|
-
border-width: 0 0 5px 5px;
|
|
111
|
-
// Fix bug in IE11 caused by transform rotate (-45deg).
|
|
112
|
-
// See: alphagov/govuk_elements/issues/518
|
|
113
|
-
border-top-color: transparent;
|
|
114
|
-
|
|
115
|
-
opacity: 0;
|
|
52
|
+
// [ ] Check box
|
|
53
|
+
.govuk-checkboxes__label::before {
|
|
54
|
+
content: "";
|
|
55
|
+
box-sizing: border-box;
|
|
56
|
+
position: absolute;
|
|
57
|
+
top: ($govuk-touch-target-gutter / 2);
|
|
58
|
+
left: ($govuk-touch-target-gutter / 2);
|
|
59
|
+
width: $govuk-checkboxes-size;
|
|
60
|
+
height: $govuk-checkboxes-size;
|
|
61
|
+
border: $govuk-border-width-form-element solid currentcolor;
|
|
62
|
+
background: transparent;
|
|
63
|
+
}
|
|
116
64
|
|
|
117
|
-
|
|
118
|
-
|
|
65
|
+
// ✔ Check mark
|
|
66
|
+
//
|
|
67
|
+
// The check mark is a box with a border on the left and bottom side (└──),
|
|
68
|
+
// rotated 45 degrees
|
|
69
|
+
.govuk-checkboxes__label::after {
|
|
70
|
+
content: "";
|
|
71
|
+
box-sizing: border-box;
|
|
72
|
+
position: absolute;
|
|
73
|
+
|
|
74
|
+
// Use "magic numbers" to define shape and position of check mark because
|
|
75
|
+
// the complexity of the shape makes it difficult to calculate dynamically.
|
|
76
|
+
top: 13px;
|
|
77
|
+
left: $govuk-checkbox-check-horizontal-position;
|
|
78
|
+
width: 23px;
|
|
79
|
+
height: 12px;
|
|
80
|
+
transform: rotate(-45deg);
|
|
81
|
+
border: solid;
|
|
82
|
+
border-width: 0 0 5px 5px;
|
|
83
|
+
// Fix bug in IE11 caused by transform rotate (-45deg).
|
|
84
|
+
// See: alphagov/govuk_elements/issues/518
|
|
85
|
+
border-top-color: transparent;
|
|
86
|
+
opacity: 0;
|
|
87
|
+
background: transparent;
|
|
119
88
|
}
|
|
120
89
|
|
|
121
90
|
.govuk-checkboxes__hint {
|
|
122
91
|
display: block;
|
|
92
|
+
width: 100%;
|
|
93
|
+
margin-top: govuk-spacing(-1);
|
|
123
94
|
padding-right: $govuk-checkboxes-label-padding-left-right;
|
|
124
|
-
padding-left: $govuk-checkboxes-label-padding-left-right;
|
|
95
|
+
padding-left: ($govuk-checkboxes-label-padding-left-right + $govuk-touch-target-size);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// This is to bypass govuk-hint's specificity on hints following labels having
|
|
99
|
+
// a margin bottom of 10px (govuk-spacing(2)). Because checkboxes are flexbox,
|
|
100
|
+
// the margin doesn't collapse so we have to do this manually.
|
|
101
|
+
.govuk-label:not(.govuk-label--m):not(.govuk-label--l):not(.govuk-label--xl) + .govuk-checkboxes__hint {
|
|
102
|
+
margin-bottom: 0;
|
|
125
103
|
}
|
|
126
104
|
|
|
127
105
|
// Focused state
|
|
128
|
-
.govuk-checkboxes__input:focus + .govuk-checkboxes__label
|
|
106
|
+
.govuk-checkboxes__input:focus + .govuk-checkboxes__label::before {
|
|
129
107
|
border-width: 4px;
|
|
130
108
|
|
|
131
109
|
// When colours are overridden, the yellow box-shadow becomes invisible
|
|
@@ -145,7 +123,7 @@
|
|
|
145
123
|
}
|
|
146
124
|
|
|
147
125
|
// Selected state
|
|
148
|
-
.govuk-checkboxes__input:checked + .govuk-checkboxes__label
|
|
126
|
+
.govuk-checkboxes__input:checked + .govuk-checkboxes__label::after {
|
|
149
127
|
opacity: 1;
|
|
150
128
|
}
|
|
151
129
|
|
|
@@ -157,7 +135,7 @@
|
|
|
157
135
|
|
|
158
136
|
.govuk-checkboxes__input:disabled + .govuk-checkboxes__label,
|
|
159
137
|
.govuk-checkboxes__input:disabled ~ .govuk-hint {
|
|
160
|
-
opacity: .5;
|
|
138
|
+
opacity: 0.5;
|
|
161
139
|
}
|
|
162
140
|
|
|
163
141
|
// =========================================================
|
|
@@ -165,9 +143,9 @@
|
|
|
165
143
|
// =========================================================
|
|
166
144
|
|
|
167
145
|
.govuk-checkboxes__divider {
|
|
168
|
-
$govuk-divider-size: $govuk-checkboxes-size !default;
|
|
169
146
|
@include govuk-font($size: 19);
|
|
170
147
|
@include govuk-text-colour;
|
|
148
|
+
$govuk-divider-size: $govuk-checkboxes-size !default;
|
|
171
149
|
width: $govuk-divider-size;
|
|
172
150
|
margin-bottom: govuk-spacing(2);
|
|
173
151
|
text-align: center;
|
|
@@ -181,7 +159,7 @@
|
|
|
181
159
|
// to be an even number in order to be centred under the 40px checkbox or radio.
|
|
182
160
|
$conditional-border-width: $govuk-border-width-narrow;
|
|
183
161
|
// Calculate the amount of padding needed to keep the border centered against the checkbox.
|
|
184
|
-
$conditional-border-padding: ($govuk-
|
|
162
|
+
$conditional-border-padding: ($govuk-touch-target-size / 2) - ($conditional-border-width / 2);
|
|
185
163
|
// Move the border centered with the checkbox
|
|
186
164
|
$conditional-margin-left: $conditional-border-padding;
|
|
187
165
|
// Move the contents of the conditional inline with the label
|
|
@@ -193,7 +171,7 @@
|
|
|
193
171
|
padding-left: $conditional-padding-left;
|
|
194
172
|
border-left: $conditional-border-width solid $govuk-border-colour;
|
|
195
173
|
|
|
196
|
-
.
|
|
174
|
+
.govuk-frontend-supported &--hidden {
|
|
197
175
|
display: none;
|
|
198
176
|
}
|
|
199
177
|
|
|
@@ -207,16 +185,10 @@
|
|
|
207
185
|
// =========================================================
|
|
208
186
|
|
|
209
187
|
.govuk-checkboxes--small {
|
|
210
|
-
|
|
211
188
|
$input-offset: ($govuk-touch-target-size - $govuk-small-checkboxes-size) / 2;
|
|
212
|
-
$label-offset: $govuk-touch-target-size - $input-offset;
|
|
213
189
|
|
|
214
190
|
.govuk-checkboxes__item {
|
|
215
|
-
@include govuk-clearfix;
|
|
216
|
-
min-height: 0;
|
|
217
191
|
margin-bottom: 0;
|
|
218
|
-
padding-left: $label-offset;
|
|
219
|
-
float: left;
|
|
220
192
|
}
|
|
221
193
|
|
|
222
194
|
// Shift the touch target into the left margin so that the visible edge of
|
|
@@ -229,36 +201,23 @@
|
|
|
229
201
|
// ▲┆└─ Check box pseudo element, aligned with margin
|
|
230
202
|
// └─── Touch target (invisible input), shifted into the margin
|
|
231
203
|
.govuk-checkboxes__input {
|
|
232
|
-
|
|
233
|
-
left: $input-offset * -1;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
@include _govuk-if-ie8 {
|
|
237
|
-
margin-left: $govuk-small-checkboxes-size * -1;
|
|
238
|
-
}
|
|
204
|
+
margin-left: $input-offset * -1;
|
|
239
205
|
}
|
|
240
206
|
|
|
241
|
-
// Adjust the size and position of the label.
|
|
242
|
-
//
|
|
243
|
-
// Unlike larger checkboxes, we also have to float the label in order to
|
|
244
|
-
// 'shrink' it, preventing the hover state from kicking in across the full
|
|
245
|
-
// width of the parent element.
|
|
246
207
|
.govuk-checkboxes__label {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
@include govuk-media-query($from: tablet) {
|
|
252
|
-
padding: 11px govuk-spacing(3) 10px 1px;
|
|
253
|
-
}
|
|
208
|
+
// Create a tiny space between the small checkbox hover state so that it
|
|
209
|
+
// doesn't clash with the label
|
|
210
|
+
padding-left: 1px;
|
|
254
211
|
}
|
|
255
212
|
|
|
256
213
|
// [ ] Check box
|
|
257
214
|
//
|
|
258
215
|
// Reduce the size of the check box [1], vertically center it within the
|
|
259
216
|
// touch target [2]
|
|
260
|
-
|
|
261
|
-
|
|
217
|
+
// Left here is 0 because we've shifted the input into the left margin
|
|
218
|
+
.govuk-checkboxes__label::before {
|
|
219
|
+
top: $input-offset; // 2
|
|
220
|
+
left: 0;
|
|
262
221
|
width: $govuk-small-checkboxes-size; // 1
|
|
263
222
|
height: $govuk-small-checkboxes-size; // 1
|
|
264
223
|
}
|
|
@@ -266,9 +225,12 @@
|
|
|
266
225
|
// ✔ Check mark
|
|
267
226
|
//
|
|
268
227
|
// Reduce the size of the check mark and re-align within the checkbox
|
|
269
|
-
.govuk-checkboxes__label
|
|
270
|
-
top:
|
|
271
|
-
|
|
228
|
+
.govuk-checkboxes__label::after {
|
|
229
|
+
top: 17px;
|
|
230
|
+
|
|
231
|
+
// Horizontal position is just the normal sized left value accounting for
|
|
232
|
+
// the new width of the smaller checkbox
|
|
233
|
+
left: (16px - $govuk-checkbox-check-horizontal-position);
|
|
272
234
|
width: 12px;
|
|
273
235
|
height: 6.5px;
|
|
274
236
|
border-width: 0 0 3px 3px;
|
|
@@ -283,16 +245,19 @@
|
|
|
283
245
|
// (If you do use them, they won't look completely broken... but seriously,
|
|
284
246
|
// don't use them)
|
|
285
247
|
.govuk-checkboxes__hint {
|
|
286
|
-
padding:
|
|
287
|
-
clear: both;
|
|
248
|
+
padding-left: ($govuk-small-checkboxes-size + $input-offset);
|
|
288
249
|
}
|
|
289
250
|
|
|
290
251
|
// Align conditional reveals with small checkboxes
|
|
291
252
|
.govuk-checkboxes__conditional {
|
|
292
253
|
$margin-left: ($govuk-small-checkboxes-size / 2) - ($conditional-border-width / 2);
|
|
293
254
|
margin-left: $margin-left;
|
|
294
|
-
padding-left: $
|
|
295
|
-
|
|
255
|
+
padding-left: ($govuk-touch-target-size - $input-offset) - ($margin-left + $conditional-border-width);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
.govuk-checkboxes__divider {
|
|
259
|
+
width: $govuk-small-checkboxes-size;
|
|
260
|
+
margin-bottom: govuk-spacing(1);
|
|
296
261
|
}
|
|
297
262
|
|
|
298
263
|
// Hover state for small checkboxes.
|
|
@@ -301,7 +266,11 @@
|
|
|
301
266
|
// is so much larger than their visible size, and so we need to provide
|
|
302
267
|
// feedback to the user as to which checkbox they will select when their
|
|
303
268
|
// cursor is outside of the visible area.
|
|
304
|
-
.govuk-checkboxes__item:hover .govuk-checkboxes__input:not(:disabled) + .govuk-checkboxes__label
|
|
269
|
+
.govuk-checkboxes__item:hover .govuk-checkboxes__input:not(:disabled) + .govuk-checkboxes__label::before {
|
|
270
|
+
// Forced colours modes tend to ignore box-shadow.
|
|
271
|
+
// Apply an outline for those modes to use instead.
|
|
272
|
+
outline: $govuk-focus-width dashed transparent;
|
|
273
|
+
outline-offset: 1px;
|
|
305
274
|
box-shadow: 0 0 0 $govuk-hover-width $govuk-hover-colour;
|
|
306
275
|
}
|
|
307
276
|
|
|
@@ -310,7 +279,12 @@
|
|
|
310
279
|
//
|
|
311
280
|
// We use two box shadows, one that restores the original focus state [1]
|
|
312
281
|
// and another that then applies the hover state [2].
|
|
313
|
-
.govuk-checkboxes__item:hover .govuk-checkboxes__input:focus + .govuk-checkboxes__label
|
|
282
|
+
.govuk-checkboxes__item:hover .govuk-checkboxes__input:focus + .govuk-checkboxes__label::before {
|
|
283
|
+
// Set different HCM colour when we have both hover/focus applied at once
|
|
284
|
+
@media screen and (forced-colors: active), (-ms-high-contrast: active) {
|
|
285
|
+
outline-color: Highlight;
|
|
286
|
+
}
|
|
287
|
+
// prettier-ignore
|
|
314
288
|
box-shadow:
|
|
315
289
|
0 0 0 $govuk-focus-width $govuk-focus-colour, // 1
|
|
316
290
|
0 0 0 $govuk-hover-width $govuk-hover-colour; // 2
|
|
@@ -323,13 +297,15 @@
|
|
|
323
297
|
// state in browsers that don't support `@media (hover)` (like Internet
|
|
324
298
|
// Explorer) – so we have to 'undo' the hover state instead.
|
|
325
299
|
@media (hover: none), (pointer: coarse) {
|
|
326
|
-
.govuk-checkboxes__item:hover .govuk-checkboxes__input:not(:disabled) + .govuk-checkboxes__label
|
|
300
|
+
.govuk-checkboxes__item:hover .govuk-checkboxes__input:not(:disabled) + .govuk-checkboxes__label::before {
|
|
327
301
|
box-shadow: initial;
|
|
328
302
|
}
|
|
329
303
|
|
|
330
|
-
.govuk-checkboxes__item:hover .govuk-checkboxes__input:focus + .govuk-checkboxes__label
|
|
304
|
+
.govuk-checkboxes__item:hover .govuk-checkboxes__input:focus + .govuk-checkboxes__label::before {
|
|
331
305
|
box-shadow: 0 0 0 $govuk-focus-width $govuk-focus-colour;
|
|
332
306
|
}
|
|
333
307
|
}
|
|
334
308
|
}
|
|
335
309
|
}
|
|
310
|
+
|
|
311
|
+
/*# sourceMappingURL=_index.scss.map */
|