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
data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.mjs
ADDED
|
@@ -0,0 +1,753 @@
|
|
|
1
|
+
function closestAttributeValue($element, attributeName) {
|
|
2
|
+
const $closestElementWithAttribute = $element.closest(`[${attributeName}]`);
|
|
3
|
+
return $closestElementWithAttribute ? $closestElementWithAttribute.getAttribute(attributeName) : null;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
function normaliseString(value, property) {
|
|
7
|
+
const trimmedValue = value ? value.trim() : '';
|
|
8
|
+
let output;
|
|
9
|
+
let outputType = property == null ? void 0 : property.type;
|
|
10
|
+
if (!outputType) {
|
|
11
|
+
if (['true', 'false'].includes(trimmedValue)) {
|
|
12
|
+
outputType = 'boolean';
|
|
13
|
+
}
|
|
14
|
+
if (trimmedValue.length > 0 && isFinite(Number(trimmedValue))) {
|
|
15
|
+
outputType = 'number';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
switch (outputType) {
|
|
19
|
+
case 'boolean':
|
|
20
|
+
output = trimmedValue === 'true';
|
|
21
|
+
break;
|
|
22
|
+
case 'number':
|
|
23
|
+
output = Number(trimmedValue);
|
|
24
|
+
break;
|
|
25
|
+
default:
|
|
26
|
+
output = value;
|
|
27
|
+
}
|
|
28
|
+
return output;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @typedef {import('./index.mjs').SchemaProperty} SchemaProperty
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
function mergeConfigs(...configObjects) {
|
|
36
|
+
const formattedConfigObject = {};
|
|
37
|
+
for (const configObject of configObjects) {
|
|
38
|
+
for (const key of Object.keys(configObject)) {
|
|
39
|
+
const option = formattedConfigObject[key];
|
|
40
|
+
const override = configObject[key];
|
|
41
|
+
if (isObject(option) && isObject(override)) {
|
|
42
|
+
formattedConfigObject[key] = mergeConfigs(option, override);
|
|
43
|
+
} else {
|
|
44
|
+
formattedConfigObject[key] = override;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return formattedConfigObject;
|
|
49
|
+
}
|
|
50
|
+
function extractConfigByNamespace(Component, dataset, namespace) {
|
|
51
|
+
const property = Component.schema.properties[namespace];
|
|
52
|
+
if ((property == null ? void 0 : property.type) !== 'object') {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const newObject = {
|
|
56
|
+
[namespace]: ({})
|
|
57
|
+
};
|
|
58
|
+
for (const [key, value] of Object.entries(dataset)) {
|
|
59
|
+
let current = newObject;
|
|
60
|
+
const keyParts = key.split('.');
|
|
61
|
+
for (const [index, name] of keyParts.entries()) {
|
|
62
|
+
if (typeof current === 'object') {
|
|
63
|
+
if (index < keyParts.length - 1) {
|
|
64
|
+
if (!isObject(current[name])) {
|
|
65
|
+
current[name] = {};
|
|
66
|
+
}
|
|
67
|
+
current = current[name];
|
|
68
|
+
} else if (key !== namespace) {
|
|
69
|
+
current[name] = normaliseString(value);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return newObject[namespace];
|
|
75
|
+
}
|
|
76
|
+
function isInitialised($root, moduleName) {
|
|
77
|
+
return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Checks if GOV.UK Frontend is supported on this page
|
|
82
|
+
*
|
|
83
|
+
* Some browsers will load and run our JavaScript but GOV.UK Frontend
|
|
84
|
+
* won't be supported.
|
|
85
|
+
*
|
|
86
|
+
* @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support
|
|
87
|
+
* @returns {boolean} Whether GOV.UK Frontend is supported on this page
|
|
88
|
+
*/
|
|
89
|
+
function isSupported($scope = document.body) {
|
|
90
|
+
if (!$scope) {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
return $scope.classList.contains('govuk-frontend-supported');
|
|
94
|
+
}
|
|
95
|
+
function validateConfig(schema, config) {
|
|
96
|
+
const validationErrors = [];
|
|
97
|
+
for (const [name, conditions] of Object.entries(schema)) {
|
|
98
|
+
const errors = [];
|
|
99
|
+
if (Array.isArray(conditions)) {
|
|
100
|
+
for (const {
|
|
101
|
+
required,
|
|
102
|
+
errorMessage
|
|
103
|
+
} of conditions) {
|
|
104
|
+
if (!required.every(key => !!config[key])) {
|
|
105
|
+
errors.push(errorMessage);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (name === 'anyOf' && !(conditions.length - errors.length >= 1)) {
|
|
109
|
+
validationErrors.push(...errors);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return validationErrors;
|
|
114
|
+
}
|
|
115
|
+
function isArray(option) {
|
|
116
|
+
return Array.isArray(option);
|
|
117
|
+
}
|
|
118
|
+
function isObject(option) {
|
|
119
|
+
return !!option && typeof option === 'object' && !isArray(option);
|
|
120
|
+
}
|
|
121
|
+
function formatErrorMessage(Component, message) {
|
|
122
|
+
return `${Component.moduleName}: ${message}`;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Schema for component config
|
|
127
|
+
*
|
|
128
|
+
* @typedef {object} Schema
|
|
129
|
+
* @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties
|
|
130
|
+
* @property {SchemaCondition[]} [anyOf] - List of schema conditions
|
|
131
|
+
*/
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Schema property for component config
|
|
135
|
+
*
|
|
136
|
+
* @typedef {object} SchemaProperty
|
|
137
|
+
* @property {'string' | 'boolean' | 'number' | 'object'} type - Property type
|
|
138
|
+
*/
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Schema condition for component config
|
|
142
|
+
*
|
|
143
|
+
* @typedef {object} SchemaCondition
|
|
144
|
+
* @property {string[]} required - List of required config fields
|
|
145
|
+
* @property {string} errorMessage - Error message when required config fields not provided
|
|
146
|
+
*/
|
|
147
|
+
/**
|
|
148
|
+
* @typedef ComponentWithModuleName
|
|
149
|
+
* @property {string} moduleName - Name of the component
|
|
150
|
+
*/
|
|
151
|
+
|
|
152
|
+
function normaliseDataset(Component, dataset) {
|
|
153
|
+
const out = {};
|
|
154
|
+
for (const [field, property] of Object.entries(Component.schema.properties)) {
|
|
155
|
+
if (field in dataset) {
|
|
156
|
+
out[field] = normaliseString(dataset[field], property);
|
|
157
|
+
}
|
|
158
|
+
if ((property == null ? void 0 : property.type) === 'object') {
|
|
159
|
+
out[field] = extractConfigByNamespace(Component, dataset, field);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return out;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
class GOVUKFrontendError extends Error {
|
|
166
|
+
constructor(...args) {
|
|
167
|
+
super(...args);
|
|
168
|
+
this.name = 'GOVUKFrontendError';
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
class SupportError extends GOVUKFrontendError {
|
|
172
|
+
/**
|
|
173
|
+
* Checks if GOV.UK Frontend is supported on this page
|
|
174
|
+
*
|
|
175
|
+
* @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support
|
|
176
|
+
*/
|
|
177
|
+
constructor($scope = document.body) {
|
|
178
|
+
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';
|
|
179
|
+
super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type="module">`');
|
|
180
|
+
this.name = 'SupportError';
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
class ConfigError extends GOVUKFrontendError {
|
|
184
|
+
constructor(...args) {
|
|
185
|
+
super(...args);
|
|
186
|
+
this.name = 'ConfigError';
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
class ElementError extends GOVUKFrontendError {
|
|
190
|
+
constructor(messageOrOptions) {
|
|
191
|
+
let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';
|
|
192
|
+
if (typeof messageOrOptions === 'object') {
|
|
193
|
+
const {
|
|
194
|
+
component,
|
|
195
|
+
identifier,
|
|
196
|
+
element,
|
|
197
|
+
expectedType
|
|
198
|
+
} = messageOrOptions;
|
|
199
|
+
message = identifier;
|
|
200
|
+
message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';
|
|
201
|
+
message = formatErrorMessage(component, message);
|
|
202
|
+
}
|
|
203
|
+
super(message);
|
|
204
|
+
this.name = 'ElementError';
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
class InitError extends GOVUKFrontendError {
|
|
208
|
+
constructor(componentOrMessage) {
|
|
209
|
+
const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\`$root\`) already initialised`);
|
|
210
|
+
super(message);
|
|
211
|
+
this.name = 'InitError';
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* @typedef {import('../common/index.mjs').ComponentWithModuleName} ComponentWithModuleName
|
|
216
|
+
*/
|
|
217
|
+
|
|
218
|
+
class GOVUKFrontendComponent {
|
|
219
|
+
/**
|
|
220
|
+
* Returns the root element of the component
|
|
221
|
+
*
|
|
222
|
+
* @protected
|
|
223
|
+
* @returns {RootElementType} - the root element of component
|
|
224
|
+
*/
|
|
225
|
+
get $root() {
|
|
226
|
+
return this._$root;
|
|
227
|
+
}
|
|
228
|
+
constructor($root) {
|
|
229
|
+
this._$root = void 0;
|
|
230
|
+
const childConstructor = this.constructor;
|
|
231
|
+
if (typeof childConstructor.moduleName !== 'string') {
|
|
232
|
+
throw new InitError(`\`moduleName\` not defined in component`);
|
|
233
|
+
}
|
|
234
|
+
if (!($root instanceof childConstructor.elementType)) {
|
|
235
|
+
throw new ElementError({
|
|
236
|
+
element: $root,
|
|
237
|
+
component: childConstructor,
|
|
238
|
+
identifier: 'Root element (`$root`)',
|
|
239
|
+
expectedType: childConstructor.elementType.name
|
|
240
|
+
});
|
|
241
|
+
} else {
|
|
242
|
+
this._$root = $root;
|
|
243
|
+
}
|
|
244
|
+
childConstructor.checkSupport();
|
|
245
|
+
this.checkInitialised();
|
|
246
|
+
const moduleName = childConstructor.moduleName;
|
|
247
|
+
this.$root.setAttribute(`data-${moduleName}-init`, '');
|
|
248
|
+
}
|
|
249
|
+
checkInitialised() {
|
|
250
|
+
const constructor = this.constructor;
|
|
251
|
+
const moduleName = constructor.moduleName;
|
|
252
|
+
if (moduleName && isInitialised(this.$root, moduleName)) {
|
|
253
|
+
throw new InitError(constructor);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
static checkSupport() {
|
|
257
|
+
if (!isSupported()) {
|
|
258
|
+
throw new SupportError();
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* @typedef ChildClass
|
|
265
|
+
* @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component
|
|
266
|
+
*/
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* @typedef {typeof GOVUKFrontendComponent & ChildClass} ChildClassConstructor
|
|
270
|
+
*/
|
|
271
|
+
GOVUKFrontendComponent.elementType = HTMLElement;
|
|
272
|
+
|
|
273
|
+
class I18n {
|
|
274
|
+
constructor(translations = {}, config = {}) {
|
|
275
|
+
var _config$locale;
|
|
276
|
+
this.translations = void 0;
|
|
277
|
+
this.locale = void 0;
|
|
278
|
+
this.translations = translations;
|
|
279
|
+
this.locale = (_config$locale = config.locale) != null ? _config$locale : document.documentElement.lang || 'en';
|
|
280
|
+
}
|
|
281
|
+
t(lookupKey, options) {
|
|
282
|
+
if (!lookupKey) {
|
|
283
|
+
throw new Error('i18n: lookup key missing');
|
|
284
|
+
}
|
|
285
|
+
let translation = this.translations[lookupKey];
|
|
286
|
+
if (typeof (options == null ? void 0 : options.count) === 'number' && typeof translation === 'object') {
|
|
287
|
+
const translationPluralForm = translation[this.getPluralSuffix(lookupKey, options.count)];
|
|
288
|
+
if (translationPluralForm) {
|
|
289
|
+
translation = translationPluralForm;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
if (typeof translation === 'string') {
|
|
293
|
+
if (translation.match(/%{(.\S+)}/)) {
|
|
294
|
+
if (!options) {
|
|
295
|
+
throw new Error('i18n: cannot replace placeholders in string if no option data provided');
|
|
296
|
+
}
|
|
297
|
+
return this.replacePlaceholders(translation, options);
|
|
298
|
+
}
|
|
299
|
+
return translation;
|
|
300
|
+
}
|
|
301
|
+
return lookupKey;
|
|
302
|
+
}
|
|
303
|
+
replacePlaceholders(translationString, options) {
|
|
304
|
+
const formatter = Intl.NumberFormat.supportedLocalesOf(this.locale).length ? new Intl.NumberFormat(this.locale) : undefined;
|
|
305
|
+
return translationString.replace(/%{(.\S+)}/g, function (placeholderWithBraces, placeholderKey) {
|
|
306
|
+
if (Object.prototype.hasOwnProperty.call(options, placeholderKey)) {
|
|
307
|
+
const placeholderValue = options[placeholderKey];
|
|
308
|
+
if (placeholderValue === false || typeof placeholderValue !== 'number' && typeof placeholderValue !== 'string') {
|
|
309
|
+
return '';
|
|
310
|
+
}
|
|
311
|
+
if (typeof placeholderValue === 'number') {
|
|
312
|
+
return formatter ? formatter.format(placeholderValue) : `${placeholderValue}`;
|
|
313
|
+
}
|
|
314
|
+
return placeholderValue;
|
|
315
|
+
}
|
|
316
|
+
throw new Error(`i18n: no data found to replace ${placeholderWithBraces} placeholder in string`);
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
hasIntlPluralRulesSupport() {
|
|
320
|
+
return Boolean('PluralRules' in window.Intl && Intl.PluralRules.supportedLocalesOf(this.locale).length);
|
|
321
|
+
}
|
|
322
|
+
getPluralSuffix(lookupKey, count) {
|
|
323
|
+
count = Number(count);
|
|
324
|
+
if (!isFinite(count)) {
|
|
325
|
+
return 'other';
|
|
326
|
+
}
|
|
327
|
+
const translation = this.translations[lookupKey];
|
|
328
|
+
const preferredForm = this.hasIntlPluralRulesSupport() ? new Intl.PluralRules(this.locale).select(count) : this.selectPluralFormUsingFallbackRules(count);
|
|
329
|
+
if (typeof translation === 'object') {
|
|
330
|
+
if (preferredForm in translation) {
|
|
331
|
+
return preferredForm;
|
|
332
|
+
} else if ('other' in translation) {
|
|
333
|
+
console.warn(`i18n: Missing plural form ".${preferredForm}" for "${this.locale}" locale. Falling back to ".other".`);
|
|
334
|
+
return 'other';
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
throw new Error(`i18n: Plural form ".other" is required for "${this.locale}" locale`);
|
|
338
|
+
}
|
|
339
|
+
selectPluralFormUsingFallbackRules(count) {
|
|
340
|
+
count = Math.abs(Math.floor(count));
|
|
341
|
+
const ruleset = this.getPluralRulesForLocale();
|
|
342
|
+
if (ruleset) {
|
|
343
|
+
return I18n.pluralRules[ruleset](count);
|
|
344
|
+
}
|
|
345
|
+
return 'other';
|
|
346
|
+
}
|
|
347
|
+
getPluralRulesForLocale() {
|
|
348
|
+
const localeShort = this.locale.split('-')[0];
|
|
349
|
+
for (const pluralRule in I18n.pluralRulesMap) {
|
|
350
|
+
const languages = I18n.pluralRulesMap[pluralRule];
|
|
351
|
+
if (languages.includes(this.locale) || languages.includes(localeShort)) {
|
|
352
|
+
return pluralRule;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
I18n.pluralRulesMap = {
|
|
358
|
+
arabic: ['ar'],
|
|
359
|
+
chinese: ['my', 'zh', 'id', 'ja', 'jv', 'ko', 'ms', 'th', 'vi'],
|
|
360
|
+
french: ['hy', 'bn', 'fr', 'gu', 'hi', 'fa', 'pa', 'zu'],
|
|
361
|
+
german: ['af', 'sq', 'az', 'eu', 'bg', 'ca', 'da', 'nl', 'en', 'et', 'fi', 'ka', 'de', 'el', 'hu', 'lb', 'no', 'so', 'sw', 'sv', 'ta', 'te', 'tr', 'ur'],
|
|
362
|
+
irish: ['ga'],
|
|
363
|
+
russian: ['ru', 'uk'],
|
|
364
|
+
scottish: ['gd'],
|
|
365
|
+
spanish: ['pt-PT', 'it', 'es'],
|
|
366
|
+
welsh: ['cy']
|
|
367
|
+
};
|
|
368
|
+
I18n.pluralRules = {
|
|
369
|
+
arabic(n) {
|
|
370
|
+
if (n === 0) {
|
|
371
|
+
return 'zero';
|
|
372
|
+
}
|
|
373
|
+
if (n === 1) {
|
|
374
|
+
return 'one';
|
|
375
|
+
}
|
|
376
|
+
if (n === 2) {
|
|
377
|
+
return 'two';
|
|
378
|
+
}
|
|
379
|
+
if (n % 100 >= 3 && n % 100 <= 10) {
|
|
380
|
+
return 'few';
|
|
381
|
+
}
|
|
382
|
+
if (n % 100 >= 11 && n % 100 <= 99) {
|
|
383
|
+
return 'many';
|
|
384
|
+
}
|
|
385
|
+
return 'other';
|
|
386
|
+
},
|
|
387
|
+
chinese() {
|
|
388
|
+
return 'other';
|
|
389
|
+
},
|
|
390
|
+
french(n) {
|
|
391
|
+
return n === 0 || n === 1 ? 'one' : 'other';
|
|
392
|
+
},
|
|
393
|
+
german(n) {
|
|
394
|
+
return n === 1 ? 'one' : 'other';
|
|
395
|
+
},
|
|
396
|
+
irish(n) {
|
|
397
|
+
if (n === 1) {
|
|
398
|
+
return 'one';
|
|
399
|
+
}
|
|
400
|
+
if (n === 2) {
|
|
401
|
+
return 'two';
|
|
402
|
+
}
|
|
403
|
+
if (n >= 3 && n <= 6) {
|
|
404
|
+
return 'few';
|
|
405
|
+
}
|
|
406
|
+
if (n >= 7 && n <= 10) {
|
|
407
|
+
return 'many';
|
|
408
|
+
}
|
|
409
|
+
return 'other';
|
|
410
|
+
},
|
|
411
|
+
russian(n) {
|
|
412
|
+
const lastTwo = n % 100;
|
|
413
|
+
const last = lastTwo % 10;
|
|
414
|
+
if (last === 1 && lastTwo !== 11) {
|
|
415
|
+
return 'one';
|
|
416
|
+
}
|
|
417
|
+
if (last >= 2 && last <= 4 && !(lastTwo >= 12 && lastTwo <= 14)) {
|
|
418
|
+
return 'few';
|
|
419
|
+
}
|
|
420
|
+
if (last === 0 || last >= 5 && last <= 9 || lastTwo >= 11 && lastTwo <= 14) {
|
|
421
|
+
return 'many';
|
|
422
|
+
}
|
|
423
|
+
return 'other';
|
|
424
|
+
},
|
|
425
|
+
scottish(n) {
|
|
426
|
+
if (n === 1 || n === 11) {
|
|
427
|
+
return 'one';
|
|
428
|
+
}
|
|
429
|
+
if (n === 2 || n === 12) {
|
|
430
|
+
return 'two';
|
|
431
|
+
}
|
|
432
|
+
if (n >= 3 && n <= 10 || n >= 13 && n <= 19) {
|
|
433
|
+
return 'few';
|
|
434
|
+
}
|
|
435
|
+
return 'other';
|
|
436
|
+
},
|
|
437
|
+
spanish(n) {
|
|
438
|
+
if (n === 1) {
|
|
439
|
+
return 'one';
|
|
440
|
+
}
|
|
441
|
+
if (n % 1000000 === 0 && n !== 0) {
|
|
442
|
+
return 'many';
|
|
443
|
+
}
|
|
444
|
+
return 'other';
|
|
445
|
+
},
|
|
446
|
+
welsh(n) {
|
|
447
|
+
if (n === 0) {
|
|
448
|
+
return 'zero';
|
|
449
|
+
}
|
|
450
|
+
if (n === 1) {
|
|
451
|
+
return 'one';
|
|
452
|
+
}
|
|
453
|
+
if (n === 2) {
|
|
454
|
+
return 'two';
|
|
455
|
+
}
|
|
456
|
+
if (n === 3) {
|
|
457
|
+
return 'few';
|
|
458
|
+
}
|
|
459
|
+
if (n === 6) {
|
|
460
|
+
return 'many';
|
|
461
|
+
}
|
|
462
|
+
return 'other';
|
|
463
|
+
}
|
|
464
|
+
};
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* Character count component
|
|
468
|
+
*
|
|
469
|
+
* Tracks the number of characters or words in the `.govuk-js-character-count`
|
|
470
|
+
* `<textarea>` inside the element. Displays a message with the remaining number
|
|
471
|
+
* of characters/words available, or the number of characters/words in excess.
|
|
472
|
+
*
|
|
473
|
+
* You can configure the message to only appear after a certain percentage
|
|
474
|
+
* of the available characters/words has been entered.
|
|
475
|
+
*
|
|
476
|
+
* @preserve
|
|
477
|
+
*/
|
|
478
|
+
class CharacterCount extends GOVUKFrontendComponent {
|
|
479
|
+
/**
|
|
480
|
+
* @param {Element | null} $root - HTML element to use for character count
|
|
481
|
+
* @param {CharacterCountConfig} [config] - Character count config
|
|
482
|
+
*/
|
|
483
|
+
constructor($root, config = {}) {
|
|
484
|
+
var _ref, _this$config$maxwords;
|
|
485
|
+
super($root);
|
|
486
|
+
this.$textarea = void 0;
|
|
487
|
+
this.$visibleCountMessage = void 0;
|
|
488
|
+
this.$screenReaderCountMessage = void 0;
|
|
489
|
+
this.lastInputTimestamp = null;
|
|
490
|
+
this.lastInputValue = '';
|
|
491
|
+
this.valueChecker = null;
|
|
492
|
+
this.config = void 0;
|
|
493
|
+
this.i18n = void 0;
|
|
494
|
+
this.maxLength = void 0;
|
|
495
|
+
const $textarea = this.$root.querySelector('.govuk-js-character-count');
|
|
496
|
+
if (!($textarea instanceof HTMLTextAreaElement || $textarea instanceof HTMLInputElement)) {
|
|
497
|
+
throw new ElementError({
|
|
498
|
+
component: CharacterCount,
|
|
499
|
+
element: $textarea,
|
|
500
|
+
expectedType: 'HTMLTextareaElement or HTMLInputElement',
|
|
501
|
+
identifier: 'Form field (`.govuk-js-character-count`)'
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
const datasetConfig = normaliseDataset(CharacterCount, this.$root.dataset);
|
|
505
|
+
let configOverrides = {};
|
|
506
|
+
if ('maxwords' in datasetConfig || 'maxlength' in datasetConfig) {
|
|
507
|
+
configOverrides = {
|
|
508
|
+
maxlength: undefined,
|
|
509
|
+
maxwords: undefined
|
|
510
|
+
};
|
|
511
|
+
}
|
|
512
|
+
this.config = mergeConfigs(CharacterCount.defaults, config, configOverrides, datasetConfig);
|
|
513
|
+
const errors = validateConfig(CharacterCount.schema, this.config);
|
|
514
|
+
if (errors[0]) {
|
|
515
|
+
throw new ConfigError(formatErrorMessage(CharacterCount, errors[0]));
|
|
516
|
+
}
|
|
517
|
+
this.i18n = new I18n(this.config.i18n, {
|
|
518
|
+
locale: closestAttributeValue(this.$root, 'lang')
|
|
519
|
+
});
|
|
520
|
+
this.maxLength = (_ref = (_this$config$maxwords = this.config.maxwords) != null ? _this$config$maxwords : this.config.maxlength) != null ? _ref : Infinity;
|
|
521
|
+
this.$textarea = $textarea;
|
|
522
|
+
const textareaDescriptionId = `${this.$textarea.id}-info`;
|
|
523
|
+
const $textareaDescription = document.getElementById(textareaDescriptionId);
|
|
524
|
+
if (!$textareaDescription) {
|
|
525
|
+
throw new ElementError({
|
|
526
|
+
component: CharacterCount,
|
|
527
|
+
element: $textareaDescription,
|
|
528
|
+
identifier: `Count message (\`id="${textareaDescriptionId}"\`)`
|
|
529
|
+
});
|
|
530
|
+
}
|
|
531
|
+
if (`${$textareaDescription.textContent}`.match(/^\s*$/)) {
|
|
532
|
+
$textareaDescription.textContent = this.i18n.t('textareaDescription', {
|
|
533
|
+
count: this.maxLength
|
|
534
|
+
});
|
|
535
|
+
}
|
|
536
|
+
this.$textarea.insertAdjacentElement('afterend', $textareaDescription);
|
|
537
|
+
const $screenReaderCountMessage = document.createElement('div');
|
|
538
|
+
$screenReaderCountMessage.className = 'govuk-character-count__sr-status govuk-visually-hidden';
|
|
539
|
+
$screenReaderCountMessage.setAttribute('aria-live', 'polite');
|
|
540
|
+
this.$screenReaderCountMessage = $screenReaderCountMessage;
|
|
541
|
+
$textareaDescription.insertAdjacentElement('afterend', $screenReaderCountMessage);
|
|
542
|
+
const $visibleCountMessage = document.createElement('div');
|
|
543
|
+
$visibleCountMessage.className = $textareaDescription.className;
|
|
544
|
+
$visibleCountMessage.classList.add('govuk-character-count__status');
|
|
545
|
+
$visibleCountMessage.setAttribute('aria-hidden', 'true');
|
|
546
|
+
this.$visibleCountMessage = $visibleCountMessage;
|
|
547
|
+
$textareaDescription.insertAdjacentElement('afterend', $visibleCountMessage);
|
|
548
|
+
$textareaDescription.classList.add('govuk-visually-hidden');
|
|
549
|
+
this.$textarea.removeAttribute('maxlength');
|
|
550
|
+
this.bindChangeEvents();
|
|
551
|
+
window.addEventListener('pageshow', () => this.updateCountMessage());
|
|
552
|
+
this.updateCountMessage();
|
|
553
|
+
}
|
|
554
|
+
bindChangeEvents() {
|
|
555
|
+
this.$textarea.addEventListener('keyup', () => this.handleKeyUp());
|
|
556
|
+
this.$textarea.addEventListener('focus', () => this.handleFocus());
|
|
557
|
+
this.$textarea.addEventListener('blur', () => this.handleBlur());
|
|
558
|
+
}
|
|
559
|
+
handleKeyUp() {
|
|
560
|
+
this.updateVisibleCountMessage();
|
|
561
|
+
this.lastInputTimestamp = Date.now();
|
|
562
|
+
}
|
|
563
|
+
handleFocus() {
|
|
564
|
+
this.valueChecker = window.setInterval(() => {
|
|
565
|
+
if (!this.lastInputTimestamp || Date.now() - 500 >= this.lastInputTimestamp) {
|
|
566
|
+
this.updateIfValueChanged();
|
|
567
|
+
}
|
|
568
|
+
}, 1000);
|
|
569
|
+
}
|
|
570
|
+
handleBlur() {
|
|
571
|
+
if (this.valueChecker) {
|
|
572
|
+
window.clearInterval(this.valueChecker);
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
updateIfValueChanged() {
|
|
576
|
+
if (this.$textarea.value !== this.lastInputValue) {
|
|
577
|
+
this.lastInputValue = this.$textarea.value;
|
|
578
|
+
this.updateCountMessage();
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
updateCountMessage() {
|
|
582
|
+
this.updateVisibleCountMessage();
|
|
583
|
+
this.updateScreenReaderCountMessage();
|
|
584
|
+
}
|
|
585
|
+
updateVisibleCountMessage() {
|
|
586
|
+
const remainingNumber = this.maxLength - this.count(this.$textarea.value);
|
|
587
|
+
const isError = remainingNumber < 0;
|
|
588
|
+
this.$visibleCountMessage.classList.toggle('govuk-character-count__message--disabled', !this.isOverThreshold());
|
|
589
|
+
this.$textarea.classList.toggle('govuk-textarea--error', isError);
|
|
590
|
+
this.$visibleCountMessage.classList.toggle('govuk-error-message', isError);
|
|
591
|
+
this.$visibleCountMessage.classList.toggle('govuk-hint', !isError);
|
|
592
|
+
this.$visibleCountMessage.textContent = this.getCountMessage();
|
|
593
|
+
}
|
|
594
|
+
updateScreenReaderCountMessage() {
|
|
595
|
+
if (this.isOverThreshold()) {
|
|
596
|
+
this.$screenReaderCountMessage.removeAttribute('aria-hidden');
|
|
597
|
+
} else {
|
|
598
|
+
this.$screenReaderCountMessage.setAttribute('aria-hidden', 'true');
|
|
599
|
+
}
|
|
600
|
+
this.$screenReaderCountMessage.textContent = this.getCountMessage();
|
|
601
|
+
}
|
|
602
|
+
count(text) {
|
|
603
|
+
if (this.config.maxwords) {
|
|
604
|
+
var _text$match;
|
|
605
|
+
const tokens = (_text$match = text.match(/\S+/g)) != null ? _text$match : [];
|
|
606
|
+
return tokens.length;
|
|
607
|
+
}
|
|
608
|
+
return text.length;
|
|
609
|
+
}
|
|
610
|
+
getCountMessage() {
|
|
611
|
+
const remainingNumber = this.maxLength - this.count(this.$textarea.value);
|
|
612
|
+
const countType = this.config.maxwords ? 'words' : 'characters';
|
|
613
|
+
return this.formatCountMessage(remainingNumber, countType);
|
|
614
|
+
}
|
|
615
|
+
formatCountMessage(remainingNumber, countType) {
|
|
616
|
+
if (remainingNumber === 0) {
|
|
617
|
+
return this.i18n.t(`${countType}AtLimit`);
|
|
618
|
+
}
|
|
619
|
+
const translationKeySuffix = remainingNumber < 0 ? 'OverLimit' : 'UnderLimit';
|
|
620
|
+
return this.i18n.t(`${countType}${translationKeySuffix}`, {
|
|
621
|
+
count: Math.abs(remainingNumber)
|
|
622
|
+
});
|
|
623
|
+
}
|
|
624
|
+
isOverThreshold() {
|
|
625
|
+
if (!this.config.threshold) {
|
|
626
|
+
return true;
|
|
627
|
+
}
|
|
628
|
+
const currentLength = this.count(this.$textarea.value);
|
|
629
|
+
const maxLength = this.maxLength;
|
|
630
|
+
const thresholdValue = maxLength * this.config.threshold / 100;
|
|
631
|
+
return thresholdValue <= currentLength;
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
/**
|
|
636
|
+
* Character count config
|
|
637
|
+
*
|
|
638
|
+
* @see {@link CharacterCount.defaults}
|
|
639
|
+
* @typedef {object} CharacterCountConfig
|
|
640
|
+
* @property {number} [maxlength] - The maximum number of characters.
|
|
641
|
+
* If maxwords is provided, the maxlength option will be ignored.
|
|
642
|
+
* @property {number} [maxwords] - The maximum number of words. If maxwords is
|
|
643
|
+
* provided, the maxlength option will be ignored.
|
|
644
|
+
* @property {number} [threshold=0] - The percentage value of the limit at
|
|
645
|
+
* which point the count message is displayed. If this attribute is set, the
|
|
646
|
+
* count message will be hidden by default.
|
|
647
|
+
* @property {CharacterCountTranslations} [i18n=CharacterCount.defaults.i18n] - Character count translations
|
|
648
|
+
*/
|
|
649
|
+
|
|
650
|
+
/**
|
|
651
|
+
* Character count translations
|
|
652
|
+
*
|
|
653
|
+
* @see {@link CharacterCount.defaults.i18n}
|
|
654
|
+
* @typedef {object} CharacterCountTranslations
|
|
655
|
+
*
|
|
656
|
+
* Messages shown to users as they type. It provides feedback on how many words
|
|
657
|
+
* or characters they have remaining or if they are over the limit. This also
|
|
658
|
+
* includes a message used as an accessible description for the textarea.
|
|
659
|
+
* @property {TranslationPluralForms} [charactersUnderLimit] - Message displayed
|
|
660
|
+
* when the number of characters is under the configured maximum, `maxlength`.
|
|
661
|
+
* This message is displayed visually and through assistive technologies. The
|
|
662
|
+
* component will replace the `%{count}` placeholder with the number of
|
|
663
|
+
* remaining characters. This is a [pluralised list of
|
|
664
|
+
* messages](https://frontend.design-system.service.gov.uk/localise-govuk-frontend).
|
|
665
|
+
* @property {string} [charactersAtLimit] - Message displayed when the number of
|
|
666
|
+
* characters reaches the configured maximum, `maxlength`. This message is
|
|
667
|
+
* displayed visually and through assistive technologies.
|
|
668
|
+
* @property {TranslationPluralForms} [charactersOverLimit] - Message displayed
|
|
669
|
+
* when the number of characters is over the configured maximum, `maxlength`.
|
|
670
|
+
* This message is displayed visually and through assistive technologies. The
|
|
671
|
+
* component will replace the `%{count}` placeholder with the number of
|
|
672
|
+
* remaining characters. This is a [pluralised list of
|
|
673
|
+
* messages](https://frontend.design-system.service.gov.uk/localise-govuk-frontend).
|
|
674
|
+
* @property {TranslationPluralForms} [wordsUnderLimit] - Message displayed when
|
|
675
|
+
* the number of words is under the configured maximum, `maxlength`. This
|
|
676
|
+
* message is displayed visually and through assistive technologies. The
|
|
677
|
+
* component will replace the `%{count}` placeholder with the number of
|
|
678
|
+
* remaining words. This is a [pluralised list of
|
|
679
|
+
* messages](https://frontend.design-system.service.gov.uk/localise-govuk-frontend).
|
|
680
|
+
* @property {string} [wordsAtLimit] - Message displayed when the number of
|
|
681
|
+
* words reaches the configured maximum, `maxlength`. This message is
|
|
682
|
+
* displayed visually and through assistive technologies.
|
|
683
|
+
* @property {TranslationPluralForms} [wordsOverLimit] - Message displayed when
|
|
684
|
+
* the number of words is over the configured maximum, `maxlength`. This
|
|
685
|
+
* message is displayed visually and through assistive technologies. The
|
|
686
|
+
* component will replace the `%{count}` placeholder with the number of
|
|
687
|
+
* remaining words. This is a [pluralised list of
|
|
688
|
+
* messages](https://frontend.design-system.service.gov.uk/localise-govuk-frontend).
|
|
689
|
+
* @property {TranslationPluralForms} [textareaDescription] - Message made
|
|
690
|
+
* available to assistive technologies, if none is already present in the
|
|
691
|
+
* HTML, to describe that the component accepts only a limited amount of
|
|
692
|
+
* content. It is visible on the page when JavaScript is unavailable. The
|
|
693
|
+
* component will replace the `%{count}` placeholder with the value of the
|
|
694
|
+
* `maxlength` or `maxwords` parameter.
|
|
695
|
+
*/
|
|
696
|
+
|
|
697
|
+
/**
|
|
698
|
+
* @typedef {import('../../common/index.mjs').Schema} Schema
|
|
699
|
+
* @typedef {import('../../i18n.mjs').TranslationPluralForms} TranslationPluralForms
|
|
700
|
+
*/
|
|
701
|
+
CharacterCount.moduleName = 'govuk-character-count';
|
|
702
|
+
CharacterCount.defaults = Object.freeze({
|
|
703
|
+
threshold: 0,
|
|
704
|
+
i18n: {
|
|
705
|
+
charactersUnderLimit: {
|
|
706
|
+
one: 'You have %{count} character remaining',
|
|
707
|
+
other: 'You have %{count} characters remaining'
|
|
708
|
+
},
|
|
709
|
+
charactersAtLimit: 'You have 0 characters remaining',
|
|
710
|
+
charactersOverLimit: {
|
|
711
|
+
one: 'You have %{count} character too many',
|
|
712
|
+
other: 'You have %{count} characters too many'
|
|
713
|
+
},
|
|
714
|
+
wordsUnderLimit: {
|
|
715
|
+
one: 'You have %{count} word remaining',
|
|
716
|
+
other: 'You have %{count} words remaining'
|
|
717
|
+
},
|
|
718
|
+
wordsAtLimit: 'You have 0 words remaining',
|
|
719
|
+
wordsOverLimit: {
|
|
720
|
+
one: 'You have %{count} word too many',
|
|
721
|
+
other: 'You have %{count} words too many'
|
|
722
|
+
},
|
|
723
|
+
textareaDescription: {
|
|
724
|
+
other: ''
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
});
|
|
728
|
+
CharacterCount.schema = Object.freeze({
|
|
729
|
+
properties: {
|
|
730
|
+
i18n: {
|
|
731
|
+
type: 'object'
|
|
732
|
+
},
|
|
733
|
+
maxwords: {
|
|
734
|
+
type: 'number'
|
|
735
|
+
},
|
|
736
|
+
maxlength: {
|
|
737
|
+
type: 'number'
|
|
738
|
+
},
|
|
739
|
+
threshold: {
|
|
740
|
+
type: 'number'
|
|
741
|
+
}
|
|
742
|
+
},
|
|
743
|
+
anyOf: [{
|
|
744
|
+
required: ['maxwords'],
|
|
745
|
+
errorMessage: 'Either "maxlength" or "maxwords" must be provided'
|
|
746
|
+
}, {
|
|
747
|
+
required: ['maxlength'],
|
|
748
|
+
errorMessage: 'Either "maxlength" or "maxwords" must be provided'
|
|
749
|
+
}]
|
|
750
|
+
});
|
|
751
|
+
|
|
752
|
+
export { CharacterCount };
|
|
753
|
+
//# sourceMappingURL=character-count.bundle.mjs.map
|