govuk_publishing_components 45.10.0 → 46.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/govuk_publishing_components/_all_components.scss +1 -0
  3. data/app/assets/stylesheets/govuk_publishing_components/components/_glance-metric.scss +75 -0
  4. data/app/views/govuk_publishing_components/components/_fieldset.html.erb +1 -2
  5. data/app/views/govuk_publishing_components/components/_glance_metric.html.erb +37 -0
  6. data/app/views/govuk_publishing_components/components/_metadata.html.erb +10 -8
  7. data/app/views/govuk_publishing_components/components/_notice.html.erb +9 -6
  8. data/app/views/govuk_publishing_components/components/_organisation_logo.html.erb +5 -7
  9. data/app/views/govuk_publishing_components/components/_panel.html.erb +4 -2
  10. data/app/views/govuk_publishing_components/components/_phase_banner.html.erb +15 -14
  11. data/app/views/govuk_publishing_components/components/docs/fieldset.yml +1 -0
  12. data/app/views/govuk_publishing_components/components/docs/glance_metric.yml +37 -0
  13. data/app/views/govuk_publishing_components/components/docs/metadata.yml +1 -0
  14. data/app/views/govuk_publishing_components/components/docs/notice.yml +1 -0
  15. data/app/views/govuk_publishing_components/components/docs/organisation_logo.yml +1 -0
  16. data/app/views/govuk_publishing_components/components/docs/panel.yml +1 -0
  17. data/app/views/govuk_publishing_components/components/docs/phase_banner.yml +1 -1
  18. data/lib/govuk_publishing_components/presenters/component_wrapper_helper.rb +1 -1
  19. data/lib/govuk_publishing_components/version.rb +1 -1
  20. data/node_modules/axe-core/axe.js +3 -3
  21. data/node_modules/axe-core/axe.min.js +2 -2
  22. data/node_modules/axe-core/package.json +1 -1
  23. data/node_modules/axe-core/sri-history.json +4 -0
  24. data/node_modules/sortablejs/Sortable.js +59 -34
  25. data/node_modules/sortablejs/Sortable.min.js +2 -2
  26. data/node_modules/sortablejs/modular/sortable.complete.esm.js +59 -34
  27. data/node_modules/sortablejs/modular/sortable.core.esm.js +59 -34
  28. data/node_modules/sortablejs/modular/sortable.esm.js +59 -34
  29. data/node_modules/sortablejs/package.json +1 -1
  30. data/node_modules/sortablejs/src/Sortable.js +28 -11
  31. metadata +5 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e3c082aaa4feaa6d8a0db9a06b6363df3e7f66d4ab725a086ae451b2642ff2da
4
- data.tar.gz: ac59758ae4497c6e14ba6c276f593848efc6290e0db0a9bf3a0f9d072dd9599f
3
+ metadata.gz: 9f03b029ded187ef6bc1d3636720d1b32d082a568588faeccb69723311c06360
4
+ data.tar.gz: 197e40d2e9dbc9ef47e76ae1c72b7d63a7b4255fdbb01f31dcc21bd234bb6099
5
5
  SHA512:
6
- metadata.gz: 96a02d46ad488ed76b391453cf69392f60405e62658edb1bb5daf91a4ec6f6b97e61b32e3913050d12ca16305f7f40f0a11e1c6009be945541ecf068036fa65b
7
- data.tar.gz: 2996cfb57f6430ee42e873d6425f455423c5509c352064a5f95ff876919e96c40689d479c4ec85f1e4349be9cf7027d8275910e1c9d5e28bef191d7ccc688fd0
6
+ metadata.gz: 7eede3b4acf9222bef3047b69fa3fe9c5190fb63277416188ed516990723ae35eec50fdc88594c6199e287500746fadf1181122f8bdbb95608382451a1f1f8ab
7
+ data.tar.gz: fe53d16fc472cb5dbee4e80b76eb61b5619d16224afdfd7ea751514d30a6604a82aa4c84ed7c8e057268e66be6a500618c37c0e42a6d8db17b17b8a2bc2f60ff
@@ -38,6 +38,7 @@
38
38
  @import "components/feedback";
39
39
  @import "components/fieldset";
40
40
  @import "components/file-upload";
41
+ @import "components/glance-metric";
41
42
  @import "components/govspeak-html-publication";
42
43
  @import "components/govspeak";
43
44
  @import "components/heading";
@@ -0,0 +1,75 @@
1
+ @import "govuk_publishing_components/individual_component_support";
2
+
3
+ .gem-c-glance-metric {
4
+ border-top: 1px solid $govuk-border-colour;
5
+ border-bottom: 0;
6
+ @include govuk-responsive-margin(6, "bottom");
7
+
8
+ &__heading {
9
+ min-height: 2.6em;
10
+ @include govuk-font($size: 24, $weight: bold);
11
+
12
+ @include govuk-responsive-margin(3, "top");
13
+ @include govuk-responsive-margin(1, "bottom");
14
+ @include govuk-responsive-padding(3, "top");
15
+
16
+ @include govuk-media-query($until: tablet) {
17
+ min-height: 4em;
18
+ }
19
+
20
+ @include govuk-media-query($until: mobile) {
21
+ min-height: 0;
22
+ }
23
+ }
24
+
25
+ &__figure {
26
+ display: flex;
27
+ @include govuk-font($size: 36, $weight: bold);
28
+ @include govuk-responsive-margin(1, "bottom");
29
+
30
+ @include govuk-media-query($until: mobile) {
31
+ @include govuk-font($size: 48, $weight: bold);
32
+ }
33
+ }
34
+
35
+ &__explicit-label {
36
+ @include govuk-visually-hidden;
37
+ }
38
+
39
+ &__context {
40
+ min-height: 5em;
41
+ border-bottom: 1px solid $govuk-border-colour;
42
+
43
+ @include govuk-media-query($until: mobile) {
44
+ @include govuk-font(16);
45
+ min-height: 0;
46
+ border-bottom: 0;
47
+ }
48
+ }
49
+
50
+ &__trend {
51
+ @include govuk-media-query($until: mobile) {
52
+ @include govuk-font(24);
53
+ }
54
+
55
+ &-text {
56
+ @include govuk-visually-hidden;
57
+ }
58
+
59
+ &-icon {
60
+ color: govuk-colour("dark-grey");
61
+
62
+ @include govuk-media-query($until: mobile) {
63
+ @include govuk-font(19);
64
+ }
65
+ }
66
+ }
67
+
68
+ &__period {
69
+ @include govuk-responsive-margin(6, "bottom");
70
+
71
+ @include govuk-media-query($until: mobile) {
72
+ @include govuk-font(16);
73
+ }
74
+ }
75
+ }
@@ -10,7 +10,6 @@
10
10
  heading_size = false unless shared_helper.valid_heading_size?(heading_size)
11
11
  error_message ||= nil
12
12
  error_id ||= nil
13
- id ||= nil
14
13
 
15
14
  if error_message
16
15
  error_id = "error-#{SecureRandom.hex(4)}" unless error_id
@@ -27,7 +26,7 @@
27
26
  legend_classes << "govuk-fieldset__legend--#{heading_size}" if heading_size
28
27
  %>
29
28
  <%= tag.div(**component_helper.all_attributes) do %>
30
- <%= tag.fieldset class: fieldset_classes, aria: { describedby: describedby }, role: role, id: id do %>
29
+ <%= tag.fieldset class: fieldset_classes, aria: { describedby: describedby }, role: role do %>
31
30
  <% if heading_level %>
32
31
  <%= tag.legend class: legend_classes do %>
33
32
  <%= content_tag(
@@ -0,0 +1,37 @@
1
+ <%
2
+ add_gem_component_stylesheet("glance-metric")
3
+
4
+ name ||= false
5
+ figure ||= nil
6
+ context ||= ""
7
+ measurement_display_label ||= ""
8
+ measurement_explicit_label ||= ""
9
+
10
+ local_assigns[:heading_level] ||= 3
11
+
12
+ shared_helper = GovukPublishingComponents::Presenters::SharedHelper.new(local_assigns)
13
+ component_helper = GovukPublishingComponents::Presenters::ComponentWrapperHelper.new(local_assigns)
14
+ component_helper.add_class("gem-c-glance-metric govuk-body")
15
+ %>
16
+ <% if name %>
17
+ <%= tag.div(**component_helper.all_attributes) do %>
18
+ <%= content_tag(shared_helper.get_heading_level, class: "gem-c-glance-metric__heading") do %>
19
+ <%= name %>
20
+ <% end %>
21
+
22
+ <% if figure.nil? %>
23
+ <span class="gem-c-glance-metric__figure">No data</span>
24
+ <% else %>
25
+ <span class="gem-c-glance-metric__figure">
26
+ <%= figure %>
27
+ <% if measurement_display_label.present? %>
28
+ <span class="gem-c-glance-metric__display-label" aria-hidden="true"><%= measurement_display_label %></span>
29
+ <% end %>
30
+ <% if measurement_explicit_label.present? %>
31
+ <span class="gem-c-glance-metric__explicit-label"><%= measurement_explicit_label %></span>
32
+ <% end %>
33
+ <% end %>
34
+ </span>
35
+ <p class="gem-c-glance-metric__context govuk-body-xs"><%= context %></p>
36
+ <% end %>
37
+ <% end %>
@@ -17,16 +17,18 @@
17
17
  direction_class = " direction-#{direction}" if local_assigns.include?(:direction)
18
18
 
19
19
  shared_helper = GovukPublishingComponents::Presenters::SharedHelper.new(local_assigns)
20
- classes = %w(gem-c-metadata)
21
- classes << "direction-#{direction}" if local_assigns.include?(:direction)
22
20
 
23
- if inverse && inverse_compress
24
- classes << "gem-c-metadata--inverse"
25
- elsif inverse
26
- classes << "gem-c-metadata--inverse gem-c-metadata--inverse-padded"
21
+ component_helper = GovukPublishingComponents::Presenters::ComponentWrapperHelper.new(local_assigns)
22
+ component_helper.add_class("gem-c-metadata")
23
+ component_helper.add_class("direction-#{direction}") if local_assigns.include?(:direction)
24
+
25
+ if inverse
26
+ component_helper.add_class("gem-c-metadata--inverse")
27
+ component_helper.add_class("gem-c-metadata--inverse-padded") unless inverse_compress
27
28
  end
28
29
 
29
- classes << shared_helper.get_margin_bottom if local_assigns[:margin_bottom]
30
+ component_helper.add_class(shared_helper.get_margin_bottom) if local_assigns[:margin_bottom]
31
+ component_helper.add_data_attribute({ module: "metadata" })
30
32
 
31
33
  disable_ga4 ||= false
32
34
  ga4_object = {
@@ -35,7 +37,7 @@
35
37
  section: "Top",
36
38
  }.to_json unless disable_ga4
37
39
  %>
38
- <%= content_tag :div, class: classes, data: { module: "metadata" } do %>
40
+ <%= tag.div(**component_helper.all_attributes) do %>
39
41
  <% if title.present? %>
40
42
  <%= content_tag :div, class: "gem-c-metadata__title" do %>
41
43
  <%= render "govuk_publishing_components/components/heading", {
@@ -16,13 +16,16 @@
16
16
  heading_level = show_banner_title ? "h3" : "h2"
17
17
 
18
18
  shared_helper = GovukPublishingComponents::Presenters::SharedHelper.new(local_assigns)
19
+ component_helper = GovukPublishingComponents::Presenters::ComponentWrapperHelper.new(local_assigns)
20
+ component_helper.add_class("govuk-notification-banner gem-c-notice")
21
+ component_helper.add_class(shared_helper.get_margin_bottom)
19
22
 
20
- css_classes = %w[govuk-notification-banner gem-c-notice]
21
- css_classes << shared_helper.get_margin_bottom
23
+ component_helper.add_aria_attribute({ label: "Notice" })
24
+ component_helper.add_aria_attribute({ live: "polite" }) if aria_live
25
+ component_helper.add_aria_attribute({ labelledby: banner_title_id }) if show_banner_title
22
26
 
23
- aria_attributes = {label: 'Notice'}
24
- aria_attributes[:live] = 'polite' if aria_live
25
- aria_attributes[:labelledby] = banner_title_id if show_banner_title
27
+ component_helper.set_lang(lang)
28
+ component_helper.add_role("region")
26
29
 
27
30
  description_present = description.present? || description_text.present? || description_govspeak.present?
28
31
 
@@ -33,7 +36,7 @@
33
36
  end
34
37
  %>
35
38
  <% if title || description_present %>
36
- <%= tag.section class: css_classes, aria: aria_attributes, lang: lang, role: "region" do %>
39
+ <%= tag.section(**component_helper.all_attributes) do %>
37
40
  <%= tag.div class: "govuk-notification-banner__header" do %>
38
41
  <%= tag.h2 banner_title, class: "govuk-notification-banner__title", id: banner_title_id %>
39
42
  <% end if show_banner_title %>
@@ -14,10 +14,10 @@
14
14
 
15
15
  # Set the wrapping element to be a heading or a `div`:
16
16
  wrapping_element = (use_heading ? "h#{heading_level}" : "div").to_sym
17
-
18
- wrapper_classes = %w[gem-c-organisation-logo]
19
- wrapper_classes << brand_helper.brand_class
20
- wrapper_classes << "gem-c-organisation-logo--inverse" if inverse
17
+ component_helper = GovukPublishingComponents::Presenters::ComponentWrapperHelper.new(local_assigns)
18
+ component_helper.add_class("gem-c-organisation-logo")
19
+ component_helper.add_class(brand_helper.brand_class)
20
+ component_helper.add_class("gem-c-organisation-logo--inverse") if inverse
21
21
 
22
22
  container_classes = [
23
23
  logo_helper.logo_container_class,
@@ -26,9 +26,7 @@
26
26
  container_classes << "gem-c-organisation-logo__container--inline" if inline
27
27
  %>
28
28
 
29
- <%= content_tag(wrapping_element, {
30
- class: wrapper_classes
31
- }) do %>
29
+ <%= content_tag(wrapping_element, **component_helper.all_attributes) do %>
32
30
  <% if organisation[:url] %>
33
31
  <%= link_to organisation[:url], class: container_classes.join(" ") do %>
34
32
  <%= logo_helper.logo_content %>
@@ -6,8 +6,10 @@
6
6
  append ||= false
7
7
 
8
8
  shared_helper = GovukPublishingComponents::Presenters::SharedHelper.new(local_assigns)
9
+ component_helper = GovukPublishingComponents::Presenters::ComponentWrapperHelper.new(local_assigns)
10
+ component_helper.add_class("gem-c-panel govuk-panel govuk-panel--confirmation")
9
11
  %>
10
- <div class="gem-c-panel govuk-panel govuk-panel--confirmation">
12
+ <%= tag.div(**component_helper.all_attributes) do %>
11
13
  <%= content_tag(shared_helper.get_heading_level, class: "govuk-panel__title") do %>
12
14
  <% if prepend %>
13
15
  <span class="gem-c-panel__prepend">
@@ -29,4 +31,4 @@
29
31
  <%= description %>
30
32
  </div>
31
33
  <% end %>
32
- </div>
34
+ <% end %>
@@ -15,26 +15,27 @@ unless message.present?
15
15
  end
16
16
  end
17
17
 
18
- container_css_classes = %w(gem-c-phase-banner govuk-phase-banner)
19
- container_css_classes << "gem-c-phase-banner--inverse" if inverse
20
-
21
- data_attributes = {}
18
+ component_helper = GovukPublishingComponents::Presenters::ComponentWrapperHelper.new(local_assigns)
19
+ component_helper.add_class("gem-c-phase-banner govuk-phase-banner")
20
+ component_helper.add_class("gem-c-phase-banner--inverse") if inverse
22
21
 
23
22
  unless disable_ga4
24
- data_attributes[:ga4_phase_banner] = phase
25
- data_attributes[:module] = "ga4-link-tracker"
26
- data_attributes[:ga4_track_links_only] = ""
27
- data_attributes[:ga4_set_indexes] = ""
28
- data_attributes[:ga4_link] = {
29
- event_name: "navigation",
30
- type: "phase banner",
31
- section: Nokogiri::HTML(message).text,
32
- }.to_json
23
+ component_helper.add_data_attribute({
24
+ ga4_phase_banner: phase,
25
+ module: "ga4-link-tracker",
26
+ ga4_track_links_only: "",
27
+ ga4_set_indexes: "",
28
+ ga4_link: {
29
+ event_name: "navigation",
30
+ type: "phase banner",
31
+ section: Nokogiri::HTML(message).text,
32
+ }.to_json
33
+ })
33
34
  end
34
35
 
35
36
  %>
36
37
 
37
- <%= tag.div class: container_css_classes, data: data_attributes do %>
38
+ <%= tag.div(**component_helper.all_attributes) do %>
38
39
  <%= tag.p class: "govuk-phase-banner__content" do %>
39
40
  <%= tag.strong app_name, class: "govuk-phase-banner__content__app-name" if app_name %>
40
41
  <%= tag.strong phase.titleize, class: "govuk-tag govuk-phase-banner__content__tag" if phase %>
@@ -6,6 +6,7 @@ body: |
6
6
  You can use the `text` property or pass `text` as a block.
7
7
  accessibility_criteria: |
8
8
  - must give inputs within the fieldset context with legend text
9
+ uses_component_wrapper_helper: true
9
10
  examples:
10
11
  default:
11
12
  data:
@@ -0,0 +1,37 @@
1
+ name: "Glance metric"
2
+ description: "The glance metric component is an at-a-glance view of data for a content item. The minimum requirements for it to display are a name and figure. "
3
+ part_of_admin_layout: true
4
+ body: |
5
+
6
+ accessibility_criteria: |
7
+ This component must:
8
+
9
+ - include an explicit label when an abbreviated label is also used
10
+ - communicate number value and label (if present) in a single dictation when read with a screen reader
11
+ - convey the meaning of the number shown
12
+ - The component must use the correct heading level for the page (defaults to `<h3>`)
13
+
14
+ shared_accessibility_criteria:
15
+ - link
16
+
17
+ uses_component_wrapper_helper: true
18
+ examples:
19
+ default:
20
+ data:
21
+ name: "Unique pageviews"
22
+ figure: "167"
23
+ measurement_display_label: "m"
24
+ measurement_explicit_label: "million"
25
+ context: "This is in your top 10 items"
26
+ no measurement labels:
27
+ data:
28
+ name: "Feedback comments"
29
+ figure: "35"
30
+ custom heading level:
31
+ description: A custom heading level can be specified if necessary. Defaults to a `h3`. The heading level does not change any styling.
32
+ data:
33
+ name: "Feedback comments"
34
+ figure: "35"
35
+ measurement_display_label: "m"
36
+ measurement_explicit_label: "million"
37
+ heading_level: 2
@@ -7,6 +7,7 @@ accessibility_criteria: |
7
7
  - indicate the initial state of expandable content
8
8
  - indicate where the state of expandable content has changed
9
9
 
10
+ uses_component_wrapper_helper: true
10
11
  shared_accessibility_criteria:
11
12
  - link
12
13
  accessibility_excluded_rules:
@@ -4,6 +4,7 @@ body: |
4
4
  The notice component replaces the notice and withdrawal notice patterns on GOV.UK.
5
5
 
6
6
  The component accepts either a simple string `description_text` parameter that it wraps in a paragraph, or a `description_govspeak` parameter that is rendered through govspeak for more complex HTML layout.
7
+ uses_component_wrapper_helper: true
7
8
  accessibility_criteria: |
8
9
  The notice must:
9
10
 
@@ -13,6 +13,7 @@ body: |
13
13
  accessibility_criteria: |
14
14
  The crest image itself must be presentational and ignored by screen readers.
15
15
 
16
+ uses_component_wrapper_helper: true
16
17
  shared_accessibility_criteria:
17
18
  - link
18
19
  examples:
@@ -2,6 +2,7 @@ name: Panel
2
2
  description: Used on confirmation or results pages to highlight important content.
3
3
  govuk_frontend_components:
4
4
  - panel
5
+ uses_component_wrapper_helper: true
5
6
  accessibility_criteria: |
6
7
  - have a text colour contrast ratio of more than 4.5:1 with its background to be visually distinct
7
8
  examples:
@@ -5,6 +5,7 @@ accessibility_criteria: |
5
5
  The label must:
6
6
 
7
7
  - have a text contrast ratio higher than 4.5:1 against the background colour to meet WCAG AA
8
+ uses_component_wrapper_helper: true
8
9
  shared_accessibility_criteria:
9
10
  - link
10
11
  examples:
@@ -42,5 +43,4 @@ examples:
42
43
  data:
43
44
  app_name: Skittles Maker
44
45
  phase: beta
45
- inverse: true
46
46
  disable_ga4: true
@@ -104,7 +104,7 @@ module GovukPublishingComponents
104
104
  return if classes.blank?
105
105
 
106
106
  class_array = classes.split(" ")
107
- unless class_array.all? { |c| c.start_with?("js-", "gem-c-", "govuk-", "app-c-", "brand--", "brand__") }
107
+ unless class_array.all? { |c| c.start_with?("js-", "gem-c-", "govuk-", "app-c-", "brand--", "brand__") || c == "direction-rtl" }
108
108
  raise(ArgumentError, "Classes (#{classes}) must be prefixed with `js-`")
109
109
  end
110
110
  end
@@ -1,3 +1,3 @@
1
1
  module GovukPublishingComponents
2
- VERSION = "45.10.0".freeze
2
+ VERSION = "46.1.0".freeze
3
3
  end
@@ -1,4 +1,4 @@
1
- /*! axe v4.10.1
1
+ /*! axe v4.10.2
2
2
  * Copyright (c) 2015 - 2024 Deque Systems, Inc.
3
3
  *
4
4
  * Your use of this Source Code Form is subject to the terms of the Mozilla Public
@@ -22,7 +22,7 @@
22
22
  }, _typeof(o);
23
23
  }
24
24
  var axe = axe || {};
25
- axe.version = '4.10.1';
25
+ axe.version = '4.10.2';
26
26
  if (typeof define === 'function' && define.amd) {
27
27
  define('axe-core', [], function() {
28
28
  return axe;
@@ -7625,7 +7625,7 @@
7625
7625
  var parentElement = node.parentElement;
7626
7626
  var parentNode = node.parentNode;
7627
7627
  var nthChild = '';
7628
- if (nodeName2 !== 'head' && nodeName2 !== 'body' && parentNode.children.length > 1) {
7628
+ if (nodeName2 !== 'head' && nodeName2 !== 'body' && (parentNode === null || parentNode === void 0 ? void 0 : parentNode.children.length) > 1) {
7629
7629
  var index = Array.prototype.indexOf.call(parentNode.children, node) + 1;
7630
7630
  nthChild = ':nth-child('.concat(index, ')');
7631
7631
  }